匿名メソッド †匿名メソッドは、基本的にコード ブロックをデリゲート パラメータとして渡すために作成します。 書き方1: button1.Click += delegate(System.Object o, System.EventArgs e) { System.Windows.Forms.MessageBox.Show("Click!"); }; 書き方2: delegate void Del(int x); Del d = delegate(int k) { /* 処理 */ }; デリゲートを宣言し、インスタンス化して使用する †//デリゲートの宣言 public delegate void Del<T>(T item); public void Notify(string str) { } Del<string> name = Notify; 参照されているライブラリのロジックを外で記述する例 †//外部のライブラリプロジェクト namespace ClassLibrary1 { public class DelegateTest { /// <summary> /// 外部のデリゲート宣言用 /// </summary> /// <returns></returns> public delegate string ExternalDelegate(); /// <summary> /// 内部のデリゲート実行用 /// </summary> public Delegate extDel; /// <summary> /// 内部の業務ロジック /// </summary> /// <param name="counter">外部から定義するパラメータ</param> /// <returns></returns> public string DoSometing(int counter) { //外部のデリゲートから取得した結果を加工する //内部の処理 return extDel.DynamicInvoke() + counter.ToString(); } } } //メインのプロジェクト namespace ConsoleApplication1 { class Program { static void Main(string[] args) { //インスタンスを作成する DelegateTest dt = new DelegateTest(); //デリゲートを指定する dt.extDel = new DelegateTest.ExternalDelegate(externalLogic); //結果を出力する Console.WriteLine(dt.DoSometing(5)); //出力結果:External Logic Called 5 } /// <summary> /// メイン部分の業務ロジック /// </summary> /// <returns></returns> private static string externalLogic() { //何かの処理 return "External Logic Called "; } } } デリゲートの結合 † デリゲート オブジェクトには、+ 演算子を使用して二つデリゲートを結合できます。結合されたデリゲートは、結合元の 2 つのデリゲートを呼び出します。結合できるのは同じ型のデリゲートだけです。- 演算子を使用すると、結合されたデリゲートからコンポーネントのデリゲートを削除できます。
超多機能のアクセス解析が永久無料! コメント:
|