class MyClass { public Action Delegate; // delegate public event Action Event; // event } static void Main() { Action act = delegate { }; var n = new MyClass(); // delegateの場合 n.Delegate = act; n.Delegate += act; n.Delegate -= act; n.Delegate(); // eventの場合 n.Event = act; // エラー n.Event += act; n.Event -= act; n.Event(); // エラー }
eventキーワードを使用すると
外部から代入と実行はできなくなります
汎用性が高いのはdelegateで
安全性が高いのはeventです