C# 使用委托的正确方式是什么?

C# 使用委托的正确方式是什么?,c#,C#,我想知道两者之间是否有区别,如果它们是相同的,哪一个是更好的做法 第一类: Action onDeath; public void RegisterDeath(Action callback) { onDeath += callback; } 然后让其他类2订阅这个RegisterDeath方法? 还是最好是: public Action onDeath; //or even public event Action onDeath; 在主类中没有混乱的情况下订阅这个公共委托人? 如

我想知道两者之间是否有区别,如果它们是相同的,哪一个是更好的做法

第一类:

Action onDeath;
public void RegisterDeath(Action callback) 
{
    onDeath += callback;
}
然后让其他类2订阅这个RegisterDeath方法? 还是最好是:

public Action onDeath;
//or even
public event Action onDeath;
在主类中没有混乱的情况下订阅这个公共委托人?
如果存在差异,是否有人可以简要解释一下

如果您公开一个委托,每个人都可以重置调用列表,甚至调用该委托:

class Test
{
    public static Action MyAction;
}

Test.MyAction = () => Console.WriteLine("Hello"); // Resets invocation list
Test.MyAction(); // Invokes delegate
在大多数情况下,这是不必要的行为。这就是为什么C#有
事件
关键字的原因。只能订阅(使用
+=
)或取消订阅(使用
-=

使用自己的方法
RegisterDeath
可以让您更好地控制如何或何时(取消)订阅代理。但在许多情况下,一个简单的
事件
就足够了

class Test
{
    public static event Action MyAction;
}

Test.MyAction = () => Console.WriteLine("Hello"); // Not allowed
Test.MyAction(); // Not allowed
Test.MyAction += () => Console.WriteLine("Hello"); // Only this is allowed