C Sharp/デリゲート
< C Sharp
ナビゲーションに移動
検索に移動
2012年4月10日 (火) 01:45時点におけるimported>Administratorによる版
デリゲート(delegate)とは、C#に搭載されている機能のひとつで、Delphiの関数ポインタを若干改良(拡張)し、リネームしたものである。
なお、C#の属するTurboPascal一族の関数ポインタと、C言語一族の関数ポインタは別物であり、C言語系プログラミング言語で育った人はとくに注意すること。Delphi由来の関数ポインタは引数や戻り値の型チェックが超厳密である。
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);
}
}