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();
}

我真正想要的是会有需要触发的事件,例如: a statechange-event.

但是我不希望StatechangeEvent成为界面的一部分IStateMachine,但似乎这是唯一的方法。我有几个实现 的类,IStateMachine因此我每次都必须重做相同的代码。

4

2 回答 2

5

在 C# 中,只有扩展方法。没有扩展属性或事件。

您必须在界面上声明事件。
为了避免一遍又一遍地编写相同的事件代码,您可以创建一个基类。

另一种可能性是“手动”实现发布-订阅模式。这就是 C# 中的事件。

您可以将扩展方法Subscribe和添加UnsubscribeIStateMachine.

他们将使用一个可能的静态类StateMachineSubscribers,该类也公开SubscribeandUnsubscribe方法。此外,它还公开了Raise您的ChangeState扩展方法使用的方法。

于 2013-03-04T13:32:04.857 回答
0

具有相应委托的事件可以是实现该接口的具体的一部分因此,如果您在接口上调用 ,则会调用某个具体类的具体实现,其中会引发您想要的事件。IStateMachineSetState

于 2013-03-04T13:31:35.947 回答