[英]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.