program study story

プログラムの勉強 アウトプット

C# イベントについて <コールバックとデリゲート基礎>

C#におけるイベントとは

「デリゲートによるコールバックメカニズムに、安全な購読と購読解除機能を追加するための文法」

●イベントを理解するためには、コールバックとデリゲート

・コールバックとは

ある処理に対し、そこから呼び出してほしい処理を渡すこと。

C#において、こうした「処理を渡す」際に使用する、メソッドへの参照のことをデリゲートと呼ぶ。

C言語の関数ポインタなどと同様に、C#のデリゲートもコールバックを実現するための機能になる。

しかし、C#の場合、オブジェクト指向言語なので、

静的メソッドなのか、インスタンスメソッドなのか。

インスタンスメソッドだとすれば、どのオブジェクトのそれを呼び出すべきなのか。

という情報まで内部で渡している。

デリゲートには、メソッドであれば何でも渡せるわけではなく、引数の数や型、戻り値の型が一致していなければならない。

「int型の引数を取り、bool型を返す」という処理に渡すため、Func<int,bool>という型を使用

class Hoga

  ・・・

  //Use LINQ, Luke.

 public IEnumerable<int> GetNumbers(Func<int,bool>pred)

  {

   foreach(var n in List)

     if(pred(n))

      yield return n;

   }

}

class Hoga

{

   static bool Equals3(int n)

   {

     return   n %  3 ==1; 

            }

   var hoge =new Hoge();

   ・・・

   var enm = hoge.GetNumbers(Equals3);

}