11

私が持っているとしましょう:

public Boolean booleanValue;

public bool someMethod(string value)
{
   // Do some work in here.
   return booleanValue = true;
}

booleanValue が変更されたときに起動するイベント ハンドラーを作成するにはどうすればよいですか? 出来ますか?

4

6 に答える 6

14

一般に、パブリック フィールドの使用は避けてください。できるだけ非公開にするようにしてください。次に、イベントを発生させるラッパー プロパティを使用できます。例を参照してください。

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 によって提供される場合もありますが、上記の方法は単なる例です。

于 2013-01-07T04:47:53.420 に答える
8

INotifyPropertyChangedは、プロパティが変更された場合に通知するように既に定義されています。

変数をプロパティでラップし、INotifyPropertyChangedインターフェイスを使用します。

于 2013-01-07T04:49:03.940 に答える
3
  1. BooleanValue のアクセスをプライベートに変更し、一貫性を保つために 1 つの方法でのみ変更できるようにします。

  2. そのメソッドでカスタム イベントを発生させます

.

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標準の方法です。

于 2013-01-07T04:46:56.843 に答える
2

おそらく、INotifyPropertyChangedインターフェイスを見てください。将来、その使用法に出くわすことは間違いありません。

MSDN: http://msdn.microsoft.com/en-us/library/system.componentmodel.inotifypropertychanged.aspx

于 2013-01-07T04:48:00.013 に答える
2
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;
}
于 2013-01-07T04:49:23.960 に答える
1

いいえ、変数の値の変更について通知を受けることはできません*。

値をクラスのプロパティにし、必要に応じて変更時にイベントを発生させることで、ほぼ目的を達成できます。

*) コードがプロセスのデバッガーである場合、CPU に変更を通知させることができます。Visual Studio のデータ変更ブレークポイントを参照してください。これには、少なくともある程度のネイティブ コードが必要であり、GC によってオブジェクトがメモリ内で移動される可能性があるため、マネージ コードを正しく実装するのが難しくなります。

于 2013-01-07T04:50:20.923 に答える