我想两个人知道两者之间是否存在差异,如果它们相同哪一个是更好的做法?
第一课:
Action onDeath;
public void RegisterDeath(Action callback)
{
onDeath += callback;
}
然后让其他类2订阅这个RegisterDeath方法? 或者做得更好:
public Action onDeath;
//or even
public event Action onDeath;
并且在主类中没有杂乱地订阅这个公共委托? 如果存在差异,可能会有人简要解释一下
答案 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
应该足够了。