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