为什么我应该在 c# 中简单地 System.Action 之前使用 Messaging/Signal/Event 库?

Why should I use a Messaging/Signal/Event library before simply System.Action in c#?

我开始使用使用 C# 的 Unity 开发项目。我发现很多人建议使用像 https://github.com/yankooliveira/signals or http://wiki.unity3d.com/index.php/CSharpMessenger_Extended 这样的库来控制事件,比如玩家 hp 的变化、一些货币的变化,或者在 none 恒定时间率中很少发生的任何变化。

事件或信号的概念确实很强大,但为什么不简单地使用 System.Action 结合事件关键字呢?这些库有什么优势?

public class SomeClass
{
    public static event Action OnSomethingChange;

    public void TriggerOnSomethingChange()
    {
        OnSomethingChange?.Invoke();
    }

    public void SubscribeToOnSomethingChange()
    {
        OnSomethingChange += OnSomethingChangeHandler;
    }

    public void UnsubscribeToOnSomethingChange()
    {
        OnSomethingChange -= OnSomethingChangeHandler;
    }

    private void OnSomethingChangeHandler()
    {
        
    }
}

这些库为您提供了事件的概括,您无需编写自己的系统。

多一点信息

当你只使用带事件键的动作事件时,需要记住你想通过事件传递的参数,因为在这个库中非常简单,唯一需要的是 - 创建自己的 class 字段,但如果使用您自己的操作或一个具有使用 Boxing/Unboxing 或公共字段所需的一般参数的操作。