簡體   English   中英

C#屬性,這兩個實現有什么區別?

[英]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#不可命名的支持字段,這些字段不會與類中的其他字段名稱沖突。

最終效果是它們是等價的 ,雖然我聽說由於支持字段的名稱而導致自動屬性的序列化問題,讓我找到問題...抱歉我現在似乎無法找到它。

功能明智沒有區別。 編譯器將從第二個生成第一個版本。

第二個實現稱為Auto-Properties ,這是框架3.0中引入的一個功能。

第一個實現是框架3.0之前的傳統方式。

有關自動屬性的示例,請參閱此鏈接 在引擎蓋下,自動屬性將為您生成支持字段。

請查看此鏈接,以反對使用它們

您可以在第一個實現中直接訪問底層。

但事實上,除了其他支持屬性之外,第二個實現會在幕后產生第一個實現。

這些屬性在功能上是相同的,但在第二個屬性中,永遠不會使用私有變量_var1_var2

在第一個中,您將使用屬性返回私有變量的實例。

在第二個中,編譯器生成字段並在后台處理它們的分配,因此您不需要顯式聲明它們。

在第二種情況下,編譯器將自動為您添加一個字段,並包裝該屬性。 它基本上等同於使用支持字段。

兩者對於開發者來說都是一樣的

暫無
暫無

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

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