「C Sharp/デリゲート」の版間の差分

提供: MonoBook
ナビゲーションに移動 検索に移動
imported>Administrator
imported>Administrator
 
(同じ利用者による、間の4版が非表示)
1行目: 1行目:
'''デリゲート'''(delegate)とは、[[C Sharp|C#]]に搭載されている機能のひとつで、[[Delphi]]の[[関数ポインタ]]を若干改良(拡張)し、リネームしたものである。
+
'''デリゲート'''(delegate)とは、[[C Sharp|C#]]に搭載されている機能のひとつで、[[Delphi]]の[[関数ポインタ]]を若干改良(拡張)し、[[リネーム]]した[[データ型]]のひとつである。
  
なお、[[C Sharp|C#]]の属する[[TurboPascal]]一族の[[関数ポインタ]]と、[[C言語]]一族の[[関数ポインタ]]は別物であり、C言語系[[プログラミング言語]]で育った人はとくに注意すること。[[Delphi]]由来の[[関数ポインタ]]は[[引数]]や[[戻り値]]の[[型チェック]]が超厳密である。
+
== 注意 ==
 +
[[C Sharp|C#]]の属する[[TurboPascal]]一族の[[関数ポインタ]]と、[[C言語]]一族の[[関数ポインタ]]は別物であり、C言語系[[プログラミング言語]]で育った人はとくに注意すること。
 +
 
 +
[[Delphi]]由来の[[関数ポインタ]]は[[引数]]や[[戻り値]]の[[型チェック]]が超厳密であり、またデリゲート生成時に指定した[[クラス]]の[[インスタンス]]の範囲内にのみ作用する。とくに作用範囲などという概念のない[[C言語]]系から来た[[プログラマー]]が陥りやすい点なので注意すること。
  
 
== Delphiの関数ポインタからの改良点 ==
 
== Delphiの関数ポインタからの改良点 ==
51行目: 54行目:
 
== 関連項目 ==
 
== 関連項目 ==
 
* [[イベント]]
 
* [[イベント]]
 +
** [[C Sharp/イベント|C#/イベント]]
 
* [[C Sharp|C#]]
 
* [[C Sharp|C#]]
  

2012年4月26日 (木) 05:04時点における最新版

デリゲート(delegate)とは、C#に搭載されている機能のひとつで、Delphi関数ポインタを若干改良(拡張)し、リネームしたデータ型のひとつである。

注意[編集 | ソースを編集]

C#の属するTurboPascal一族の関数ポインタと、C言語一族の関数ポインタは別物であり、C言語系プログラミング言語で育った人はとくに注意すること。

Delphi由来の関数ポインタ引数戻り値型チェックが超厳密であり、またデリゲート生成時に指定したクラスインスタンスの範囲内にのみ作用する。とくに作用範囲などという概念のないC言語系から来たプログラマーが陥りやすい点なので注意すること。

Delphiの関数ポインタからの改良点[編集 | ソースを編集]

Delphi関数ポインタから改良された点として、ひとつのデリゲートに複数のメソッドを追加できるようになった点である。いうなれば配列に近い扱いとなった。

using System;

// 戻り値はvoid型(なし)
// 引数はstring型が1個
// なSomeDelegateという関数ポインタ型を定義。
delegate void SomeDelegate(string name);

class DelegateTest01
{
    public static void Main()
    {
        // デリゲート生成
        SomeDelegate del = new SomeDelegate(func1);
        del("C#");
        // output:
        //   hello, C#

        // 「+=」演算子でデリゲートにメソッド追加
        del += new SomeDelegate(func2);
        del("C#");
        // output:
        //   hello, C#
        //   こんぬづわ、C#

        // 「-=」演算子でデリゲートからメソッド削除
        del -= new SomeDelegate(func2);
        del("C#");
        // output:
        //   hello, C#
    }

    public static void func1(string name)
    {
        Console.WriteLine("hello, " + name);
    }

    public static void func2(string name)
    {
        Console.WriteLine("こんぬづわ、" + name);
    }
}

関連項目[編集 | ソースを編集]

参考文献[編集 | ソースを編集]

外部リンク[編集 | ソースを編集]