Class实例化C#

Class instantiation C#

我是 C# 初学者。

每次我在 class 中创建构造函数来实例化 class。

class OtherClass
{
    void Main()
    {
        MyClass myClass = new MyClass();
    }
}

class MyClass
{
    public string text;
    public int num;

    public MyClass()
    {
        text = "something";
        num = 12;
    }
}

但是今天我看到了新的变体

class OtherClass
{
    void Main()
    {
        MyClass myClass = new MyClass { num = 12, text = "something" };
    }
}

class MyClass
{
    public string text;
    public int num;
}

有人能解释一下区别吗?

P.S对不起我的英语。

它被称为 Object Initializer

这是标准的 C# - 它创建 class 然后为属性赋值。

您应该阅读 C# 语言规范。

从技术上讲,这等同于:

var myClass = new MyClass ();
myCVlass.num = 12;
myClass.text = "something";

只是语法糖,即 VS 会在代码分析中自动向您推荐简化语法。

文档中的解释在这个link下。

第一个是具有一组硬编码值的构造函数。所以不是那么有用。您想让构造函数将值作为参数。其他很少有用的东西。

第二件事是对象初始化器。它的工作方式类似于数组初始值设定项,因为它只是工作的 shorthand/syntax 糖。 Initializer 只是对 public variables/setters.

的一堆正常赋值

有很多情况(只读字段、私有字段、私有设置器)只有构造函数可以写一些东西。 Object Initializer 无权访问它。真的只有shorthand.

第二个令人困惑的地方可能是隐式构造函数。如果您不提供构造函数,则会自动创建一个隐式的无参数构造函数。一旦你定义了任何构造函数,这个就会消失,因为在那种情况下你可能不再 想要 自动构造函数。有时有意没有无参数甚至 public 构造函数。你的情况

class MyClass
{
    public string text;
    public int num;
}

绝对有一个无参数构造函数MyClass()