[英]What is happening with this C# object initializer code?
這個C#代碼發生了什么? 我甚至不確定它為什么編譯。 具體來說,它在設置Class1Prop嘗試使用對象初始化器語法的地方發生了什么? 它似乎是無效的語法,但它在運行時編譯並產生空引用錯誤。
void Main()
{
var foo = new Class1
{
Class1Prop =
{
Class2Prop = "one"
}
};
}
public class Class1
{
public Class2 Class1Prop { get; set; }
}
public class Class2
{
public string Class2Prop { get; set; }
}
這是C#規范中的對象初始化器語法所允許的,它被稱為嵌套對象初始化器 。 它相當於:
var _foo = new Class1();
_foo.Class1Prop.Class2Prop = "one"
var foo = _foo;
為什么拋出空引用異常應該更明顯一些。 Class1Prop從未在Class1的構造函數中初始化。
這種語法的好處是調用者可以使用方便的對象初始化器語法,即使屬性是getter-only,也只能在嵌套對象上設置可變屬性。 例如,如果Class1Prop是getter-only屬性,則該示例仍然有效。
請注意,創建了一個無法訪問的臨時變量,以防止在完全初始化運行之前訪問字段或數組插槽。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.