哪个是使用委托的正确方法?

时间:2018-04-29 10:26:19

标签: c#

我想两个人知道两者之间是否存在差异,如果它们相同哪一个是更好的做法?

第一课:

Action onDeath;
public void RegisterDeath(Action callback) 
{
    onDeath += callback;
}

然后让其他类2订阅这个RegisterDeath方法? 或者做得更好:

public Action onDeath;
//or even
public event Action onDeath;

并且在主类中没有杂乱地订阅这个公共委托? 如果存在差异,可能会有人简要解释一下

1 个答案:

答案 0 :(得分:7)

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

class Test
{
    public static Action MyAction;
}

Test.MyAction = () => Console.WriteLine("Hello"); // Resets invocation list
Test.MyAction(); // Invokes delegate

在大多数情况下,这是不受欢迎的行为。这就是C#拥有event关键字的原因。事件只能订阅(使用+=)或取消订阅(使用-=)。

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

使用您自己的方法RegisterDeath可以让您更好地控制委托可以(不)订阅的方式或时间。在许多情况下,简单的event应该足够了。