我已经查询了约the use of event syntax and its importance in c# code
。所以,我发现这些优点:c#应用程序中的事件语法与委托语法
- 不能直接指定事件(我们没有一个人可以删除以前所有订阅的风险,与委托的语法
- 没有外部用户可以引发事件
我写这个片段更明白上面这几点:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace certiflibrary
{
public class Class1
{
public static void Main()
{
Pub p = new Pub();
p.OnChange +=() => Console.WriteLine("First");
p.OnChange +=() => Console.WriteLine("Second");
p.OnChange =() => Console.WriteLine("Third");
p.Raise();
Console.ReadKey();
Console.WriteLine(p.OnChange.GetInvocationList().Length);
Console.ReadKey();
PubEvent pubevent = new PubEvent();
pubevent.OnchangeEvent += (sender, e) => Console.WriteLine("Event Raised: {0}",e.Name);
pubevent.Raise();
Console.ReadKey();
}
}
public class Pub
{
public Action OnChange { get; set; }
public void Raise()
{
if(OnChange != null)
{
OnChange();
}
}
}
public class PubEvent
{
public event EventHandler<SpecialArgs> OnchangeEvent = delegate { };
public void Raise()
{
OnchangeEvent(this, new SpecialArgs("hello"));
}
}
public class SpecialArgs:EventArgs
{
public SpecialArgs(string _name)
{
Name= _name;
}
public string Name { get; set; }
}
}
第一点是明确的:我不能直接分配一个事件,但我不理解第二个,即使在我的代码中,我也可以从课堂外访问该事件并提出。
那么,Event语法如何防止不需要的用户引发事件?