1

カスタム クラス内のものを検索するメソッドを実装したいと考えています。汎用コレクションのように機能する必要があります-関数にポインターを渡すと、メソッドは検索する必要があるすべてを反復処理し、この関数を適用し、true を返す場合は見つかったアイテムを返します。

関数ポインターをパラメーターとして渡したいのですが、デリゲート型を宣言したくありません。

私は次のようなことができることを知っています:

delegate bool Foo(MyClass)
MyClass MyMethod(Foo x)
{...}

そして、私は次のようなことができることを知っています:

MyClass MyMethod(Func<MyClass,bool> x)

しかし、デリゲート型を宣言せずに、また、持つことができるパラメーターの数に制限がある Func<> のような組み込みのものを使用せずにそれを行うことはできますか (Func の場合は 1 つ...)

4

3 に答える 3

0

いつでもデリゲートを渡して、 DynamicInvokeを呼び出すことができます。

MyClass MyMethod(Delegate x) {
    // ...
    x.DynamicInvoke(....);
    // ...
}
于 2012-04-07T07:18:35.773 に答える
0

少し古い学校ですが、必要に応じてデリゲートを使用できます:)

public void TestInvokeDelegate()
{
    InvokeDelegate( new TestDelegate(ShowMessage), "hello" );
}

public void InvokeDelegate(TestDelegate del, string message)
{
    del(message);
}

public delegate void TestDelegate(string message);

public void ShowMessage(string message)
{
    Debug.WriteLine(message);
}
于 2012-04-07T07:26:59.527 に答える
0

Visitor パターンを実装しようとしているようです。この場合、visit メソッドには通常、1 つのパラメータ (visit するインスタンス) しかありません。追加の引数が渡されると、パターンの使用が隠され、推論が難しくなります。この記事では、C# で実装する 1 つの方法を示します。

重要なのは、訪問プロセスに影響を与えるすべてのパラメーターをカプセル化する訪問者クラスを作成することです。この方法では、visiting メソッドで問題のオブジェクト以外を渡す必要はありません。それ以外はすべてインスタンス フィールドに格納されます。

ただし、メソッドにいくつかの追加パラメーターを本当に渡したいが、それらがどのような型を持つことができるかわからない場合は、それを行う方法があります。.NET の世界では多かれ少なかれ標準的なアプローチは、戻り値なしで type の単一パラメーターを持つデリゲートを使用することですobject。例はParameterizedThreadStart delegateです。

public delegate void ParameterizedThreadStart(
    Object obj
)

この方法では、デリゲートでパラメーターを 1 つだけ渡すことができますが、最終的に追加の引数が必要ない場合は、クラスのインスタンス、配列、または null など、何でもかまいません。このアプローチの欠点は、実行時エラーにつながる可能性のある型キャストが必要になることです。

于 2012-04-07T07:40:12.623 に答える