2010-12-12 59 views
2

非常簡單的問題,但我覺得理解我們爲什麼這麼做非常重要。爲什麼我們需要創建類變量來獲取和設置屬性?

我可以在類中創建一個屬性,如下所示:

一號方法:

public class MyClass 
{ 
    public string MyProperty {get;set;} 
} 

第二個方法:

public class MyClass 
{ 
    private string _myProperty; 

    public string MyProperty 
    { 
     get 
     { 
      return _myProperty; 
     } 
     set 
     { 
      _myProperty = value; 
     } 
    } 
} 

幾乎所有的文章都使用後一種方法。爲什麼我們需要在類中創建一個臨時變量來保存字符串值。爲什麼我們不能只使用第一種方法?第二種方法是否提供任何好處?創建額外的變量來存儲值不是不好的內存和性能嗎?

回答

8

Automatic properties直到C#3.0才被添加到C#中,因此在C#3.0推出之前編寫了許多使用後面的表單的示例或文章。除非你需要在你的財產製定者和獲得者中做額外的工作,否則沒有理由選擇一個。

+2

正確答案。正如鏈接所解釋的,第一種方法就是讓編譯器爲你做第二個。除了保存擊鍵之外,它們實際上並沒有什麼不同。 – 2010-12-12 18:37:00

1

自動制定者自動屬性auto-implemented properties(第一種方法)僅可用於.NET框架> = 3.0。因此,在Framework 3.0發佈之前編寫的文章使用第二種方法。

這兩種方法是等價的。在內部,他們以相同的方式工作,所以我更喜歡少寫代碼並儘可能使用第一種方法。

+0

謝謝:-) – InfoLearner 2010-12-12 18:27:12

1

自動屬性並不總是可用。另外,如果你在屬性中有某種特殊的動作,但不希望它在類的內部執行,聲明的變量也會有幫助。

0

我絕對不擅長C#,但據我所知,這些方法對你的代碼是一樣的。不同的是,在第一種方法中,您不能直接控制自動生成的PRIVATE MyProperty屬性。

但是,想象一下,你要做一些例行程序,或者更糟糕的是 - 將這個類擴展到另一個例程。第一種方法會失敗。

+0

我真的不明白這一點。你能解釋一下,謝謝 – InfoLearner 2010-12-12 21:10:58

1

當然,如果你想能夠訪問後臺字段,你仍然需要編寫完整的語法。例如,如果您要提出變更事件:

private string _name; 
public string Name 
{ 
    get 
    { 
     return _name; 
    } 
    set 
    { 
     if (_name != value) 
     { 
      _name = value; 
      RaisePropertyChanged("Name"); // assuming this method handles raising the event 
     } 
    } 
} 
相關問題