私はC#の中に、例えばAS3のような関数型があるかどうかを知りたいです。私はこのようなsomnthing(ただし、C#で)をしたいと思っ:C#に関数型がありますか?
(関数への参照)private function doSomething():void {
// statements
}
var f:Function = doSomething
f()
私はC#の中に、例えばAS3のような関数型があるかどうかを知りたいです。私はこのようなsomnthing(ただし、C#で)をしたいと思っ:C#に関数型がありますか?
(関数への参照)private function doSomething():void {
// statements
}
var f:Function = doSomething
f()
はい、.NETではデリゲートと呼ばれ、関数型ではありません。
予約キーワードdelegate
を使用して新しいキーワードを定義します。クラスライブラリにあらかじめ定義されているものがたくさんあります。それを割り当てることがその後
public delegate void DoSomethingDelegate(Object param1, Object param2);
:
DoSomethingDelegate f = DoSomething;
f(new Object(), new Object());
基本クラスライブラリで定義されたデリゲート型の一般的な2つの種類、その方法のための1つもありますあなたの例と一致するものを定義するには
価値を返す、そして、そうでない人のために1つ、そしてあなたが持っている引数の数に変化があります。
2つは、値を返すメソッドの場合はFunc<..>
、そうでない場合はAction<..>
です。
あなたのケースでは、これは動作します:
Action<Object, Object> f = DoSomething;
f(new Object(), new Object());
注意をこの最後の場合には、あなたがDoSomethingDelegate
を宣言する必要はありません。
彼らと呼ばれている代表者
ここで素晴らしいプライマーだ:http://www.akadia.com/services/dotnet_delegates_and_events.html
どのように実装されていますか? –
彼らはバックグラウンドで完全なクラスですが、コンストラクタは関数を受け取りますが、C#2と3はその事実を完全に遠ざけました。これは良いことです。 – Dykam
でdelegatesの概念。 NETはまさにあなたが探しているものです。
リンクされたページには例がありますが、多くのチュートリアルやそれらの実装方法や使い方の詳細な説明もあります。 Google away!
はい、Delegatesという種類の安全な関数ポインタがあります。たとえば...
void Main()
{
object o1 = new object();
object o2 = new object();
Action<object, object> act = DoSomething;
act(o1, o2);
}
private void DoSomething(object o1, object o2)
{
// do that thang
}
Action<T>
public delegate void Action<T1, T2>(T1 arg1, T2 arg2)
...デリゲートに構築されています。たとえば...
List<int> lst = new List<int>() { 1, 2, 3, 4, 5 };
var res = lst.Where(l => l > 3);
Whereメソッドの引数はラムダ式です。 Eric Whiteさんのブログで、この記事に関する素晴らしいディスカッションをご覧ください:Query Composition Using Functional Programming Techniques in C# 3.0
私はあなたがC#デリゲートタイプを探していると思います。
delegate void DoSomethingDelegate(object obj1, object obj2);
void DoSomething(object a, object b)
{
}
void RunDoSomething()
{
//use your delegate
DoSomethingDelegate d = new DoSomethingDelegate(DoSomething);
d(new object(), new object());
//alernatively, use the built in generic version
Action<object, object> d2 = new Action<object, object>(DoSomething);
d2(new object(), new object());
}
FuncとActionはLinqで頻繁に使用されています。 – Dykam
問題は、独自のFunc実装を作成できないため、悲しいことに、それをカットしないということです。 – Rolf