2012-02-17 83 views
2

可能重複:
Difference between Property and Field in C#爲什麼使用成員變量?

我開始了新的工作一對夫婦前使用C#周的(事情我已經基本上開始學習-since-在那裏),我已經看到一對夫婦的做事方式,我很好奇,爲什麼(看到,因爲我傾向於清新,他們都拿起東西在過去幾年。)

基本上,我試圖找出原因:

private int i; 

優於:

private int I {get;set;} 

如果答案是(我懷疑),額外的IL生成用於調用GET /套,那麼爲什麼做autoimplemented獲得/套都存在嗎?爲什麼遜於

public int i; 

public int I{get;set;} 

更奇怪的是,別的我爲什麼不只是總是使用性質,或者爲什麼我不會避免autoimplemented方法,如瘟疫,一個或另一個。

我知道這聽起來像是一個邏輯問題,當我想到它時,卻沒有那麼多,所以我希望它寫出某種意義。

感謝

+0

一般情況下,你會* *經常使用性能。我認爲這是你的問題的答案,或者至少是你應該尋求的答案。至於它們爲什麼存在,考慮到這些屬性是在私有字段的引擎下實現的,所以爲了使屬性正常工作,私有字段*需要被支持。因此,刪除此功能將不會有多大意義。此外,自動屬性(在問題中顯示的簡寫語法)不是直到後來才爲C#發明的,因此,不久前,程序員不得不手動編寫所有後備字段。 – 2012-02-17 21:52:10

+0

你使用屬性的原因是(你的'int I {get; set;}')是因爲屬性是你希望外界看到你的類的方式。 私人財產本質上是無用的。 您想使用公共屬性而不是公共字段的原因主要是風格,不僅適用於您,也適用於使用反射的任何程序。 – 2012-02-17 21:53:07

+0

這已經回答 [這裏] [1] [1]:http://stackoverflow.com/questions/3035790/purpose-of-getters-and-setters – 2012-02-17 21:55:41

回答

1

有很多次,當你需要額外的邏輯超出了自動實現屬性定義。

例如,如果你想實現INotifyPropertyChanged的,在這種情況下,你需要自己的支持字段,所以你可以寫:

private int someValue; 
public int SomeValue 
{ 
    get { return this.someValue; } 
    set 
    { 
     if (value != this.someValue) 
     { 
      this.someValue = value; 
      this.RaisePropertyChanged("SomeValue"); // This extra logic required... 
     } 
    } 
} 
相關問題