言語セクション

匿名メソッド

匿名メソッドは、基本的にコード ブロックをデリゲート パラメータとして渡すために作成します。

書き方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 つのデリゲートを呼び出します。結合できるのは同じ型のデリゲートだけです。- 演算子を使用すると、結合されたデリゲートからコンポーネントのデリゲートを削除できます。
MSDNにいいサンプルがあります:
http://msdn.microsoft.com/ja-jp/library/ms173175(v=VS.80).aspx



超多機能のアクセス解析が永久無料!

コメント:



(画像の文字列を入力して下さい)

トップ   編集 凍結解除 差分 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2019/12/02 (月) 12:33:19 (1628d)

G|Cg|C@Amazon Yahoo yV

z[y[W yVoC[UNLIMITȂ1~] COiq COsیI