[英]C# properties, what is the difference between these two implementations?
以下兩個POCO類的實現有什么區別?
class Test
{
int _var1;
string _var2;
public int var1
{
get
{
return _var1;
}
set
{
_var1 = value;
}
}
public string var2
{
get
{
return _var2;
}
set
{
_var2 = value;
}
}
}
和
class Test2
{
int _var1;
string _var2;
public int var1
{
get;
set;
}
public string var2
{
get;
set;
}
}
第一個是帶有支持字段的常規屬性實現,第二個是自動實現的屬性,並且不會使用這些字段,因為編譯器將為您生成支持字段。
自動實現的屬性使您不必編寫支持字段和樣板代碼來訪問它們,編譯器在IL中創建C#不可命名的支持字段,這些字段不會與類中的其他字段名稱沖突。
最終效果是它們是等價的 ,雖然我聽說由於支持字段的名稱而導致自動屬性的序列化問題,讓我找到問題...抱歉我現在似乎無法找到它。
功能明智沒有區別。 編譯器將從第二個生成第一個版本。
您可以在第一個實現中直接訪問底層。
但事實上,除了其他支持屬性之外,第二個實現會在幕后產生第一個實現。
這些屬性在功能上是相同的,但在第二個屬性中,永遠不會使用私有變量_var1
和_var2
。
在第一個中,您將使用屬性返回私有變量的實例。
在第二個中,編譯器生成字段並在后台處理它們的分配,因此您不需要顯式聲明它們。
在第二種情況下,編譯器將自動為您添加一個字段,並包裝該屬性。 它基本上等同於使用支持字段。
兩者對於開發者來說都是一樣的
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.