我找到了几篇关于使用扩展方法引发事件的帖子,但是我的问题有点不同:
我有一个这样的界面:
public interface IStateMachine
{
void SetState(IState NewState);
IState GetState();
}
使用这个接口(interface)我可以创建如下的扩展方法:
public static void ChangeState(this IStateMachine StateMachine, IState NewState)
{
StateMachine.GetState().Exit();
StateMachine.SetState(NewState);
StateMachine.GetState().Enter();
}
我真正想要的是需要触发一些事件,例如:statechange-event
。
但是我不希望 StatechangeEvent
成为 IStateMachine
接口(interface)的一部分,但似乎这是唯一的方法。我有几个实现 IStateMachine
的类,因此我每次都必须重做相同的代码。
最佳答案
在 C# 中,只有扩展方法。没有扩展属性或事件。
您必须在界面上声明该事件。
为避免需要一遍又一遍地编写相同的事件代码,您可以创建一个基类。
另一种可能性是“手动”实现 Publish-Subscribe图案。这就是 C# 中的事件。
您可以将扩展方法Subscribe
和Unsubscribe
添加到IStateMachine
。
他们可能会使用静态类 StateMachineSubscribers
,该类还公开了 Subscribe
和 Unsubscribe
方法。此外,它还公开了 ChangeState
扩展方法使用的 Raise
方法。
关于c# - 使用扩展方法添加事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15202666/