0

我正在学习构造函数,并且在编程方面仍然是一个新手,所以如果我不正确地使用任何术语,请提前道歉。我相信我所读到的是 C# 中有一个方便的默认构造函数,它允许您像这样在对象初始化中声明属性……</p>

Cat cat = new Cat { Age = 10, Name = "Fluffy" };

然而,我在 Unity3D 引擎中使用 UnityScript,这种语言虽然通常被称为 Javascript,但更类似于 JScript.NET。初始化对象时是否有像 C# 这样的默认构造函数可用?

目前我要做的是初始化对象,然后一次设置每个属性。或者,我可以创建一个我可以使用的构造函数,但我只是好奇那里是否已经有一个像 C# 中的默认构造函数?

4

2 回答 2

5

除非Cat是 a struct,否则它可能没有默认构造函数:这完全取决于类。如果一个类的所有构造函数都带参数(即没有默认构造函数)构造

new MyClass { ... }

将是非法的。

请注意,即使对于缺少默认构造函数的类,您也可以使用相同的初始化构造:您只需调用非默认构造函数,如下所示:

class Cat {
    public string Name {get;set;}
    public string Age {get;set;}
    public Cat(string name) {Name = name;}
}

Cat myCat = new Cat("Fluffy") {Age = 10 };
于 2014-01-16T16:38:50.263 回答
2

您要问的不是默认构造函数。它被称为对象初始化器

它不会是 .NET 或 Mono 的特性,因为它们不是语言;初始化器是语言特性。我曾尝试在 UnityScript 中使用它们,但它们要么没有实现(我打赌),要么它们的语法没有记录。

对于您自己的类/结构,我不认为它们经常有用,但它们对于处理您不控制其源的类/结构很有用:

var v = new Vector3 { y = .5F }; // x and z are still zero, the default for floats

如果你能够编写 Vector3,你可以给它一个这样的构造函数:

public Vector3(x = 0, y = 0, z = 0) : this()
{
    this.x = x;
    this.y = y;
    this.z = z;
}

并使用命名参数语法,例如:

var v = new Vector3(y: .5F);

鉴于初始化器语法,对于像 Vector3 这样的简单可变结构体来说,这样做没有意义,但是当您开始使用只读字段和私有设置属性时,您会发现构造函数更有价值。

于 2014-01-16T18:41:07.557 回答