C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: C#でbindを行いたい


(過去ログ 36 を表示中)

[トピック内 3 記事 (1 - 3 表示)]  << 0 >>

■18372 / inTopicNo.1)  C#でbindを行いたい
  
□投稿者/ 出水 (52回)-(2008/05/13(Tue) 20:47:29)

分類:[C#] 

class Foo{
int TaskA() { return 0; }
int TaskB() { return 0; }
int TaskC(int x) { return 0; }

delegate int Func();

void func()
{
    ArrayList list = new ArrayList();

    list.Add(new Func(TaskA));
    list.Add(new Func(TaskB));

    int n = 10;
    //list.Add(new Func(TaskC(n)));

    foreach (Func f in list)
    {
        f();
    }
}
}

環境はVS.NET(2002)です。
上記のようにdelegateのリストをforeachでまわしたいわけですが、
その中に引数をとる関数を入れたいわけです(コメントの部分)
いわゆる、C++のbindにあたるものですが、C#だとどうやって作ればいいでしょうか

引用返信 編集キー/
■18392 / inTopicNo.2)  Re[1]: C#でbindを行いたい
□投稿者/ Azulean (109回)-(2008/05/13(Tue) 23:29:03)
2008/05/13(Tue) 23:41:35 編集(投稿者)
そのままじゃ無理でしょう。
間にクラスをかませるしか。

注: VS.NET2003での”コンパイル”確認のため.NET 1.1相当です。(実行はしていません)

// パターン1 : 特化したクラス。internalTaskCのようなメソッドが少数の場合
public class TaskCClass
{
	private int _x;
	public TaskCClass(int x)
	{
		_x = x;
	}
	private int internalTaskC(int x) { return 0; }
	public int TaskC() { return internalTaskC(_x); }
}

// パターン2 : int型の引数を1個持つデリゲート向け汎用クラス
public class WrappingClass
{
	private int _x;
	public delegate int Func2(int x);
	private Func2 _Func2;
	public WrappingClass(int x, Func2 func2)
	{
		_x = x;
		_Func2 = func2;
	}
	public int Execute() { return _Func2(_x); }
}

どちらにしてもコンストラクタで値を渡して、インスタンスメソッドをデリゲートとして渡す形です。

引用返信 編集キー/
■18401 / inTopicNo.3)  Re[2]: C#でbindを行いたい
□投稿者/ 出水 (53回)-(2008/05/14(Wed) 02:20:24)
ありがとうございます
パターン1は思いついても、実際の関数はメンバ変数を引き込んでいるし、
関数自体はPrivateなので、どうしたものかと悩んでいました

パターン2だとすっきりしますね、これで行きたいと思います
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -