.NET中是否有一个默认构造函数,就像在C#中一样?

时间:2014-01-16 16:34:28

标签: .net constructor unity3d unityscript jscript.net

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

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

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

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

2 个答案:

答案 0 :(得分:5)

除非Catstruct,否则它可能没有默认构造函数:它全部取决于类。如果类的所有构造函数都接受参数(即没有默认构造函数),那么构造

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时,您将会发现构造者更有价值。