Delegate の基礎

C# の デリゲート(delegate デレゲート?)の基礎です。

前田稔(Maeda Minoru)の超初心者のプログラム入門

プログラムの作成

  1. デリゲート(delegate: 代表、委譲、委託)とは、オブジェクト指向に合わせたメソッドを参照するための型です。
    delegate に呼び出したいメソッドを格納しておいて、これを通じてメソッドを呼び出します。
    C言語で言うと「関数ポインタ」のように、呼び出すメソッドを取り扱う機能です。
    C言語のプログラムは 関数名をパラメータで渡す を参照して下さい。
    delegate を最も良く使うのは event の時でしょうか。
    event のプログラムは event の基礎 を参照して下さい。
  2. まず最初にプログラムを作成して動かしてみて下さい。
    デリゲートのサンプルプログラム(Console.cs)の全ソースコードです。
    プロジェクトの作成方法は Hello C# を参照して下さい。
    /**********************************************/
    /*★ Delegate のテストプログラム    前田 稔 ★*/
    /**********************************************/
    using System;
    
    namespace ConsoleApp
    {
        delegate int TestDelegate( int x, int y );
        class Class2
        {
            public int method( int x, int y )
            {
                return x*y;
            }
        }
        class Class1
        {
            static void Main()
            {
                Class2 class2 = new Class2();
                TestDelegate testdelegate = new TestDelegate( class2.method );
                int result = testdelegate( 3, 4 );
                Console.WriteLine( result );
                Console.ReadLine();
            }
        }
    }
    

プログラムの説明

  1. デリゲート(delegate)を用いて、メソッドの形式(タイプと引数)を定義します。
    今回呼び出すメソッドは int 型で、二個の int 型の引数を受け取ります。
    delegate int TestDelegate( int x, int y );
  2. デリゲートから呼び出されるメソッドを class Class2 の method() として定義します。
        class Class2
        {
            public int method( int x, int y )
            {
                return x*y;
            }
        }
        
  3. デリゲートから呼び出される class Class2 を生成して class2 に格納します。
    Class2 class2 = new Class2();
  4. デリゲートにメソッド(method)を登録します。
    登録するメソッドは、型と引数が一致していなければなりません。
    TestDelegate testdelegate = new TestDelegate( class2.method );
    C# 2.0 からは、デリゲートへの暗黙の変換が出来るようになりました。
    TestDelegate testdelegate = class2.method;
  5. デリゲートを通じてメソッドを呼び出します。
    int result = testdelegate( 3, 4 );
  6. C/C++ プログラムは「超初心者のプログラム入門(C/C++)/Delegate の基礎」を参照して下さい。
    Delegate の基礎

超初心者のプログラム入門(C# Frame Work)