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