2013-10-16 50 views
2

假設我有一類以下(擴展MVVMLight的ViewModelBase):類裏面,你的價值分配給屬性或背場

private ObservableCollection<Merchant> merchants; 

public ObservableCollection<Merchant> Merchants 
{ 
    get { return merchants; } 
    set { Set(nameof(Merchants), ref merchants, value); } 
} 

裏面我的課,我應該初始化值財產或支持領域?而在我的課程方法中,我應該使用屬性還是後臺?

我只是在學習,我傾向於使用兩者,而我沒有看到任何區別。

簡而言之:在課堂內部,我是否應該使用該屬性或其支持域?

回答

5

這真的取決於你想要做什麼。

當您的財產增加PropertyChanged時,最好使用屬性設置器而不是支持字段,即使是在您的類中也是如此,因此消費者會收到更改值的通知。

雖然有一個例外:在您的構造函數中,您會使用後備字段,因爲那時沒有消費者可能訂閱了PropertyChanged事件,因此從構造函數中引發事件並不是必需的。

如果你的設置器中有其他邏輯 - 比如驗證 - 你總是應該使用屬性設置器而不是後臺字段。

5

我會去的財產。這樣,當你將邏輯添加到getter或setter(比如驗證)時,你不需要改變其他任何東西。

0

get; set;的整個想法是授予受控級別的「支持字段」對類的訪問權限,否則這些類不具有可見性。

考慮到這一點,當其他類訪問後臺字段的值或以特定方式設置值時,您可以假設get或set將會並且經常具有它自己的邏輯。您可能希望或不希望此類(擁有後臺字段的類)調用自定義getter/setter,並且存在關於應該引用哪個屬性的答案。

0

如果它是與兩個getter和setter屬性,使用自動屬性語法如下:

public ObservableCollection<Merchant> Merchants { get; set; } 

如果您有限制對它們的訪問之一,在做這樣以下:

public ObservableCollection<Merchant> Merchants { get; private set; } 

的唯一原因使用私人支持字段或者是當它的只讀,然後你將初始化它在構造函數,或者如果你有設置該屬性值有一些附加邏輯(LIK e,實施時INotifyPropertyChanged)。

此外,使用屬性訪問更加重構友好。

底線:使用屬性setter,除非它是一個不可變(只讀)字段,或者你想繞過屬性的setter邏輯。

+0

使用c#6,您現在也可以使用只讀屬性。 「歡迎來到明天的世界!」 – ANeves