5

拡張メソッドを使用したイベントの発生に関する投稿をいくつか見つけましたが、私の質問は少し異なります。

私はこのようなインターフェースを持っています:

public interface IStateMachine 
{
    void SetState(IState NewState);
    IState GetState();
}

このインターフェイスを使用して、次のような拡張メソッドを作成できます。

public static void ChangeState(this IStateMachine StateMachine, IState NewState) 
{
    StateMachine.GetState().Exit();
    StateMachine.SetState(NewState);
    StateMachine.GetState().Enter();
}

私が本当に望んでいるのは、起動する必要があるイベントがあることですstatechange-event

ただし、をインターフェイスStatechangeEventの一部にしたくありませんが、それが唯一の方法のようです。IStateMachineを実装するクラスがいくつかあるためIStateMachine、毎回同じコードをやり直す必要があります。

4

2 に答える 2

5

C# には拡張メソッドしかありません。拡張プロパティまたはイベントはありません。

インターフェイスでイベントを宣言する必要があります。
同じイベント コードを何度も記述する必要がないように、基本クラスを作成できます。

もう 1 つの可能性は、Publish-Subscribeパターンを「手動で」実装することです。それが C# のイベントです。

Subscribe拡張メソッドとUnsubscribeを に追加できますIStateMachine

およびメソッドStateMachineSubscribersも公開する可能性のある静的クラスを使用します。さらに、拡張メソッドで使用されるメソッドを公開します。SubscribeUnsubscribeRaiseChangeState

于 2013-03-04T13:32:04.857 に答える
0

対応するデリゲートを持つイベントは、そのインターフェイスを実装する具象クラスの一部にすることができますしたがって、インターフェイスでを呼び出すと、具体的なクラスの具体的な実装が呼び出され、その内部で必要なイベントが発生します。IStateMachineSetState

于 2013-03-04T13:31:35.947 に答える