gpt4 book ai didi

c# - 使用扩展方法添加事件

转载 作者:太空狗 更新时间:2023-10-29 23:24:17 25 4
gpt4 key购买 nike

我找到了几篇关于使用扩展方法引发事件的帖子,但是我的问题有点不同:

我有一个这样的界面:

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

您可以将扩展方法SubscribeUnsubscribe 添加到IStateMachine

他们可能会使用静态类 StateMachineSubscribers,该类还公开了 SubscribeUnsubscribe 方法。此外,它还公开了 ChangeState 扩展方法使用的 Raise 方法。

关于c# - 使用扩展方法添加事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15202666/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com