Action<T>を利用したカプセル化
Action<>は単一のパラメーターを受け取り、戻り値を持たないメソッドをカプセル化します。
つまりvoid Func(T param)なら使えるデリゲート型
   public partial class MainWindow : Window
   {
       Action<string> MessageTarget;
       public MainWindow()
       {
           InitializeComponent();
           bool flag;
           flag=true;
           if (flag)
               MessageTarget = Show;
           else
               MessageTarget = Console.WriteLine;
           MessageTarget("Hello!");
       }
       private void Show(string obj)
       {
           MessageBox.Show(obj);
       }
   }

Action<>は複数のパラメーターも扱える。返り値は持たない
Func<>も同様の効果を持ち、こちらは返り値を持たせる事ができる。最後のパラメータの型が返り値
   public partial class MainWindow : Window
   {
       public Func<int, int, bool> testFunc { get; set; }      //受け付けるパラメータ数はまだ増やせる、最期のパラメータが返り値の型になる
       public Func<string, string> testFunc2 { get; set; }
       public Action<object, object> testAction { get; set; }  //パラメータ数は増やせる。返り値はもたない

       public MainWindow()
       {
           InitializeComponent();

           var d = testFunc;
           d = Method;
           Console.WriteLine(d(5,3).ToString());

           testFunc2 = UpperString;
           Console.WriteLine(testFunc2("aBcDeF"));

           var dd = testAction;
           object a = "aaaa";
           object b = "bbbb";
           dd = Method2;
           dd(a, b);
       }

       public bool Method(int x, int y)
       {
           return (x > y);
       }

       public string UpperString(string s)
       {
           return s.ToUpper();
       }

       public void Method2(object a, object b)
       {
          MessageBox.Show(a.ToString() + b.ToString());
       }
   }
最終更新:2012年10月30日 01:03