为什么我应该在 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 或公共字段所需的一般参数的操作。
我开始使用使用 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 或公共字段所需的一般参数的操作。