いきなりソースコード。↓↓↓
---
public class test1
{
public test1()
{
var m3 = typeof(test1).GetEvents()[0];
var z3 = typeof(test1).GetMethod(nameof(func1), BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance);
var x3 = z3.CreateDelegate(typeof(EventHandler
m3.AddEventHandler(this, x3);
Notification("foo");
m3.RemoveEventHandler(this, x3);
Notification("bar");
}
public event EventHandler
void Notification(string s) => Event1?.Invoke(this, s);
void func1(object o, string s) => Console.WriteLine(s);
}
---
イベントハンドラは身近なところでいうと、WinFormでいうとボタンイベントなどに
使われていて、おおむね1:1の関係で使用されていますが1:Nとして使用することもできます。
1:Nができると何がいいかというと、1つのイベントをN箇所に通知する事ができるのでObserverパターン的な使い方が可能になるということです。
プログラムデザインでいえばList型のような1:Nの関係性がある時、変化を全体に通知したい場合などに使用するととても効果的です。
0 件のコメント:
コメントを投稿