私が持っているとしましょう:
public Boolean booleanValue;
public bool someMethod(string value)
{
// Do some work in here.
return booleanValue = true;
}
booleanValue が変更されたときに起動するイベント ハンドラーを作成するにはどうすればよいですか? 出来ますか?
私が持っているとしましょう:
public Boolean booleanValue;
public bool someMethod(string value)
{
// Do some work in here.
return booleanValue = true;
}
booleanValue が変更されたときに起動するイベント ハンドラーを作成するにはどうすればよいですか? 出来ますか?
一般に、パブリック フィールドの使用は避けてください。できるだけ非公開にするようにしてください。次に、イベントを発生させるラッパー プロパティを使用できます。例を参照してください。
class Foo
{
Boolean _booleanValue;
public bool BooleanValue
{
get { return _booleanValue; }
set
{
_booleanValue = value;
if (ValueChanged != null) ValueChanged(value);
}
}
public event ValueChangedEventHandler ValueChanged;
}
delegate void ValueChangedEventHandler(bool value);
これは、必要なものを実現するための単純な「ネイティブ」な方法の 1 つです。他の方法もあり、.NET Framework によって提供される場合もありますが、上記の方法は単なる例です。
INotifyPropertyChangedは、プロパティが変更された場合に通知するように既に定義されています。
変数をプロパティでラップし、INotifyPropertyChanged
インターフェイスを使用します。
BooleanValue のアクセスをプライベートに変更し、一貫性を保つために 1 つの方法でのみ変更できるようにします。
そのメソッドでカスタム イベントを発生させます
.
private bool _boolValue;
public void ChangeValue(bool value)
{
_boolValue = value;
// Fire your event here
}
オプション 2: プロパティにして、setter でイベントを発生させる
public bool BoolValue { get { ... } set { _boolValue = value; //Fire Event } }
編集:他の人が言っINotifyPropertyChanged
たように、これを行う.NET標準の方法です。
おそらく、INotifyPropertyChanged
インターフェイスを見てください。将来、その使用法に出くわすことは間違いありません。
MSDN: http://msdn.microsoft.com/en-us/library/system.componentmodel.inotifypropertychanged.aspx
CallingClass.BoolChangeEvent += new Action<bool>(AddressOfFunction);
bool プロパティ プロシージャを使用するクラスでは、次のようにします。
public event Action<bool> BoolChangeEvent;
public Boolean booleanValue;
public bool someMethod(string value)
{
// Raise event to signify the bool value has been set.
BoolChangeEvent(value);
// Do some work in here.
booleanValue = true;
return booleanValue;
}
いいえ、変数の値の変更について通知を受けることはできません*。
値をクラスのプロパティにし、必要に応じて変更時にイベントを発生させることで、ほぼ目的を達成できます。
*) コードがプロセスのデバッガーである場合、CPU に変更を通知させることができます。Visual Studio のデータ変更ブレークポイントを参照してください。これには、少なくともある程度のネイティブ コードが必要であり、GC によってオブジェクトがメモリ内で移動される可能性があるため、マネージ コードを正しく実装するのが難しくなります。