eventOne(キーワード 'event')とeventTwo(w/oキーワード)の違いは何ですか?キーワード 'event'はC#ではオプションですか?
class Program
{
public event EventHandler eventOne;
public EventHandler eventTwo;
public void RaiseOne()
{
if (eventOne != null)
eventOne(this, EventArgs.Empty);
}
public void RaiseTwo()
{
if (eventTwo != null)
eventTwo(this, EventArgs.Empty);
}
static void Main(string[] args)
{
var p = new Program();
p.eventOne += (s, e) => Console.WriteLine("One");
p.eventTwo += (s, e) => Console.WriteLine("Two");
p.RaiseOne();
p.RaiseTwo();
}
}
前の答えはあなたが実際にILを見たことがあり考慮して、違いを説明するためのプログラムでありますか?あなたは驚かれるでしょう。 – Prankster
はい、あります。何があなたを驚かせた? –
'add'と 'remove'が実際に生成されている間、コンパイラはそれらを最適化しました。したがって、上記のコードでは、代理人のアクセス修飾子だけが違います。 – Prankster