我想两个人知道两者之间是否存在差异,如果它们是相同的哪个是更好的做法?
第一类:
Action onDeath;
public void RegisterDeath(Action callback)
{
onDeath += callback;
}
Run Code Online (Sandbox Code Playgroud)
然后让其他类2订阅这个RegisterDeath方法?或者做得更好:
public Action onDeath;
//or even
public event Action onDeath;
Run Code Online (Sandbox Code Playgroud)
并且在主类中没有杂乱地订阅这个公共委托?如果存在差异,可能会有人简要解释一下
如果您公开公开委托,则每个人都可以重置调用列表,甚至可以调用委托:
class Test
{
public static Action MyAction;
}
Test.MyAction = () => Console.WriteLine("Hello"); // Resets invocation list
Test.MyAction(); // Invokes delegate
Run Code Online (Sandbox Code Playgroud)
在大多数情况下,这是不受欢迎的行为.这就是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
Run Code Online (Sandbox Code Playgroud)
使用您自己的方法RegisterDeath可以让您更好地控制委托(un)订阅的方式和时间.但在许多情况下,简单event就足够了.
| 归档时间: |
|
| 查看次数: |
56 次 |
| 最近记录: |