我想在作爲對象的公共變量的bool變量發生更改時立即通知程序。例如;查詢對象的公共變量
說,在Windows窗體應用程序中創建了conn
類的實例。
有一個Ready
變量,存在類conn的公共變量。
我希望在此變量發生變化時收到通知。
我做了一個快速的研究,以解決這個問題在stackoverflow但答案建議使用屬性,我認爲不適合我的應用程序。
我想在作爲對象的公共變量的bool變量發生更改時立即通知程序。例如;查詢對象的公共變量
說,在Windows窗體應用程序中創建了conn
類的實例。
有一個Ready
變量,存在類conn的公共變量。
我希望在此變量發生變化時收到通知。
我做了一個快速的研究,以解決這個問題在stackoverflow但答案建議使用屬性,我認爲不適合我的應用程序。
我會假設你指的是一個領域,當你說公衆VA可變結構。
除了少數例外,最好不要在C#類的公共領域,而私人領域與公共存取:
class BadClass
{
public int Value; // <- NOT preferred
}
class GoodClass
{
private int value;
public int Value
{
get { return this.value; }
set { this.value = value; }
}
}
原因之一來構建你的代碼這種方式,所以你可以做不止一件物品的吸氣和吸塵器。適用於您的情況的一個例子是屬性更改通知:
class GoodClass : INotifyPropertyChanged
{
private int value;
public int Value
{
get { return this.value; }
set
{
this.value = value;
this.OnPropertyChanged("Value");
}
}
public event PropertyChangedEventHandler PropertyChanged;
private void OnPropertyChanged(string name)
{
if (this.PropertyChanged != null)
{
this.PropertyChanged(this, new PropertyChangedEventArgs(name);
}
}
}
如果要實現這樣的類,你可以使用它是這樣的:如果你改變了Value
財產
void SomeMethod()
{
var instance = new GoodClass();
instance.PropertyChanged += this.OnPropertyChanged;
}
void OnPropertyChanged(object sender, PropertyChangedEventArgs e)
{
if (e.PropertyName == "Value")
{
// Do something here.
}
}
,它不僅會改變底層字段的值,還會引發事件,並調用事件處理函數。
您想爲此使用Observer pattern。在.NET中最直接的做法是事件系統。在類conn
,創建一個事件:
public event EventHandler ReadyChanged;
,然後當你創建的conn
一個實例,訂閱該事件:
o.ReadyChanged += (s, e) =>
{
// do something
}
,最後,當conn
的標誌變化,火通過新的方法事件命名OnReadyChanged
:
protected virtual void OnReadyChanged()
{
if (ReadyChanged != null) { ReadyChanged(this, new EventArgs()); }
}
爲什麼不使用事件 – makc
你需要澄清一下,我很害怕。爲什麼房產「不合適」? 'INotifyPropertyChanged'將是一個很好的開始。 –
語言中沒有任何內容,您必須使用自定義事件手動實現它。 –