我已經查詢了約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語法如何防止不需要的用戶引發事件?