メインメニューを開く

差分

C Sharp/デリゲート

1,969 バイト追加, 2012年4月10日 (火) 01:44
ページの作成:「'''デリゲート'''(delegate)とは、C#に搭載されている機能のひとつで、Delphi関数ポインタを若干改良(拡張)...」
'''デリゲート'''(delegate)とは、[[C Sharp|C#]]に搭載されている機能のひとつで、[[Delphi]]の[[関数ポインタ]]を若干改良(拡張)し、リネームしたものである。

なお、[[C Sharp|C#]]の属する[[TurboPascal]]一族の[[関数ポインタ]]と、[[C言語]]一族の[[関数ポインタ]]は別物であり、C言語系[[プログラミング言語]]で育った人はとくに注意すること。[[Delphi]]由来の[[関数ポインタ]]は[[引数]]や[[戻り値]]の[[型チェック]]が超厳密である。

== Delphiの関数ポインタからの改良点 ==
[[Delphi]]の[[関数ポインタ]]から改良された点として、ひとつのデリゲートに複数のメソッドを追加できるようになった点である。いうなれば[[配列]]に近い扱いとなった。
<source lang="csharp">
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);
}
}
</source>

== 関連項目 ==
* [[イベント]]
== 参考文献 ==
<references/>
== 外部リンク ==

{{stub}}
匿名利用者