[英]Add events using Extension methods
我发现了一些关于使用扩展方法提升事件的帖子,但我的问题有点不同:
我有这样的界面:
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
,例如: statechange-event
。
但是我不希望StatechangeEvent
成为IStateMachine
接口的一部分,但似乎这是唯一的方法。 我有几个实现IStateMachine
类,因此我每次都必须重做相同的代码。
在C#中,只有扩展方法。 没有扩展属性或事件。
您必须在界面上声明事件。
为了避免一遍又一遍地编写相同的事件代码,您可以创建一个基类。
另一种可能性是“手动”实现发布 - 订阅模式。 这就是C#中的事件。
您可以将扩展方法Subscribe
和Unsubscribe
到IStateMachine
。
他们将使用一个可能是静态类的StateMachineSubscribers
,它也公开了Subscribe
和Unsubscribe
方法。 此外,它公开了ChangeState
扩展方法使用的Raise
方法。
具有相应委托的事件可以是实现该IStateMachine
接口的具体类的一部分。 所以,如果你SetState
,在界面中,一些具体的类及其具体 implementaion被调用,它里面提出你想要的事件。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.