评估我对SignalBus / EventBus的实施

已加入
2020年4月19日
留言内容
7
编程经验
1-3
您如何通过通用静态类实现?

此选项的优化程度和便捷性如何?

我看到了调用Fire的缺点,我们不确切知道参数是什么,但是我们可以看一下委托。我们可以解决这个问题吗?

C#:
public static class Test<T> where T : Delegate
{

    private static T _delegate;

    public static void Fire(params object[] args) => _delegate?.DynamicInvoke(args);
    public static void Subscribe(T action) => _delegate = Delegate.Combine(_delegate, action) as T;
    public static void Unsubscribe(T action) => _delegate = Delegate.Remove(_delegate, action) as T;
    
}

C#:
Test<OnNoteTriggered>.Subscribe(Show);
Test<OnNoteTriggered>.Unsubscribe(Show);
Test<OnNoteTriggered>.Fire("LOOOOOOOOL");

泛型静态类如何?是否为每种类型创建一个实例?
 

跳伞

工作人员
已加入
2019年4月6日
留言内容
2,531
地点
弗吉尼亚州切萨皮克
编程经验
10+

跳伞

工作人员
已加入
2019年4月6日
留言内容
2,531
地点
弗吉尼亚州切萨皮克
编程经验
10+
您如何通过通用静态类实现?

此选项的优化程度和便捷性如何?
我并没有真正看到这种结构的价值。也许我对使用C#的约定根深蒂固 事件处理程序<TEventArgs> that I just see this as a way of a JavaScript style invocation of delegates instead of the C# style invocation of delegates. I prefer writing strongly typed code where errors are caught at compile time. I'm not quite seeing how your Fire() will let me catch errors at compile time.
 
最佳 底部