簡體   English   中英

類實例化 C#

[英]Class instantiation C#

我是 C# 的初學者。

每次我在我的類中創建構造函數來實例化類。

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;
}

有人可以解釋差異嗎?

PS對不起我的英語。

這是標准的C# - 它創建類,然后為屬性賦值。

您應該閱讀C#語言規范。

從技術上講,這與以下內容相同:

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

只是語法糖,即 VS 會在代碼分析中自動推薦您作為簡化語法。

文檔中的解釋在此鏈接下

它被稱為對象初始值設定項

第一個是具有一組硬編碼值的構造函數。 所以不是那么有用。 您希望構造函數將值作為參數。 其他任何東西都很少有用。

第二件事是對象初始值設定項。 它的工作原理類似於數組初始值設定項,因為它只是用於工作的速記/語法糖。 Initializer 只是對公共變量/setter 的一系列正常賦值。

在許多情況下(只讀字段、私有字段、私有 setter),只有構造函數可以寫一些東西。 對象初始值設定項無法訪問它。 這真的只是速記。

令人困惑的第二件事可能是隱式的 Constructor 如果您不提供構造函數,則會自動創建一個隱式的、無參數的構造函數。 一旦您定義了任何構造函數,此構造函數就會消失,因為在這種情況下,您可能不再需要自動構造函數了。 有時故意沒有無參數甚至公共構造函數。 在你的情況下

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

絕對有一個無參數構造函數MyClass()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM