Tag: CSharp/デリゲート

目次

参考情報

デリゲートとは

  • 関数ポインタのようなもの。
  • ただしデリゲート変数には複数のメソッドを登録できる(マルチキャストデリゲートと呼ばれる)。

簡単なデリゲート

delegateの宣言

  • delegate 戻り値の型 名前(引数)のように宣言する
    delegate int SimpleDelegete(string message)
    

delegateの生成と呼び出し

  • 一番簡単なdelegateのインスタンスを生成して直接メソッドを呼び出す例。
            delegate void SpeakDelegate(string message);
    
            private void Speak(string message)
            {
                Debug.WriteLine(message);
            }
    
            private void StarSpeak(string message)
            {
                Debug.WriteLine("★" + message);
            }
    
            private void simple_Clicked(object sender, RoutedEventArgs e)
            {
                //古式ゆかしい書き方
                SpeakDelegate s = new SpeakDelegate(Speak);
                s("Hello World");
    
                //C#2.0からはメソッドからdelegateへ暗黙の変換がなされる。
                SpeakDelegate s2 = Speak;
                s2("Hello World2");
    
                //マルチキャストデリゲートと呼ばれる(SpeakとStartSpeakが順番に呼ばれる)
                SpeakDelegate s3 = Speak;
                s3 += StarSpeak;
                s3("Hello World3");       
            }
    
  • 出力結果
    Hello World
    Hello World2
    Hello World3
    ★Hello World3
    

Tips

SpeakDelegate s = new SpeakDelegate(Speak)とSpeakDelegate s2 = Speakの違いは?

  • デリゲート (C# によるプログラミング入門)やMSDNによるとC#2.0から導入されたメソッドとdelegateの暗黙の変換機能を使っているかどうかの違いらしい。
  • わざわざnewする必要はなさそうだがコードを読むためには両方覚えておいた方がよさそう。

Delegateの比較


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2016-04-13 (水) 16:48:10