質問

2 つのメソッドを持つ自動生成クラスを含む DLL アセンブリがあるとします。

public class AutoGeneratedClass
{
    public int DoSomething(bool forReal) { ??? }
    public void DoSomethingElse(string whatever) { ??? }
}

方法は本当に何でも構いません。上記は単なる例です。

??? の代わりにどのようなコードを生成する必要がありますか?上記では、呼び出しのパラメータを自動的にパックして別のクラスの単一のジェネリック メソッドに送信し、実際に呼び出しを処理して結果を返すようにするにはどうすればよいでしょうか?

public class GenericClass
{
    public ??? GenericHandler(???) { ??? }
}

私は同様に機能するものを探していると思います Expression<Func<...>> LINQ では、どこにでも送信してそこで分解できるデータ構造にコンパイルされます。

ただし、AutoGeneratedClass の呼び出し元を賢明に保つために、元のメソッドのプロトタイプを、通常のローカルに実装されたメソッドであるかのように維持したいと考えています。

これが達成できない場合、どのような選択肢がありますか?

ありがとう!

役に立ちましたか?

解決

クラスが必要ですか?インターフェースを使用すると、人生がずっと楽になります- System.Runtime.Remoting.Proxies.RealProxy または必要に応じて新しいタイプを作成します。 Rhino.Mocks が後者を行うと信じています(ライブラリを使用して重い作業を行う) -また、インターフェースを使用できる場合は、Rhino.Mocksがどのように実装されているかを確認するのが良い出発点になるでしょう。

他のヒント

制限が何なのかよくわからないので、ここで暗中模索してみます。これは、AutoGenerated クラスの部分メソッド/部分クラスに適したケースのように思えます。(注意してください、私はこれをコンパイラを通して実行していないので、おそらくいくつかのクリーンアップが必要です。)

public partial class AutoGenerated
{
    public partial int ProcessDoSomething(bool forReal);
    public int DoSomething(bool forReal)
    {
        //some generated code against error conditions??
        return ProcessDoSomething(forReal)
    }

    .....
}

public partial class AutoGenerated
{
    public partial int ProcessDoSomething(bool forReal)
    {
        //call the generic handler...
    }
}

まだ式を理解する作業を行っているため、ジェネリック ハンドラーの LINQ のような式の部分には触れないつもりです。ただし、考慮すべき点は、LINQ のような式パスをたどった場合、GenericClass の保守がどの程度困難になるか、または容易になるかということです。

私の経験では、かなりの数の開発者がデリゲートとランバ式に慣れていません。Expressions を使用するコードを見ると、(文字通り) 身がすくんでしまいます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top