我正在学习构造函数,并且我仍然是编程中的新手,所以如果我使用任何术语不正确,请提前道歉。我相信我所读到的是C#中有一个方便的默认构造函数,它允许你像这样在对象初始化中声明属性......
Cat cat = new Cat { Age = 10, Name = "Fluffy" };
但是我在Unity3D引擎中使用UnityScript,这种语言虽然通常被称为Javascript,但更类似于JScript.NET。初始化对象时是否有类似C#的默认构造函数?
目前我要做的是初始化对象,然后一次设置一个属性。或者我可以创建一个我可以使用的构造函数,但我只是好奇,如果在C#中已经有一个默认的那个?
答案 0 :(得分:5)
除非Cat
是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 };
答案 1 :(得分:2)
您所询问的内容并未称为the default constructor。它被称为object initializer。
它不是.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;
}
并使用named parameter语法,如下:
var v = new Vector3(y: .5F);
给定初始化器语法,对于像Vector3这样的简单可变结构,没有必要为此烦恼,但是当您开始使用readonly字段并私下设置properties时,您将会发现构造者更有价值。