繁体   English   中英

使用扩展方法添加事件

[英]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#中的事件。

您可以将扩展方法SubscribeUnsubscribeIStateMachine

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

具有相应委托的事件可以是实现IStateMachine接口的具体类的一部分。 所以,如果你SetState ,在界面中,一些具体的类及其具体 implementaion被调用,它里面提出你想要的事件。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM