0

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

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

メソッドは本当に何でもかまいません。上記はあくまでもイメージです。

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

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

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

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

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

ありがとうございました!

4

2 に答える 2

1

授業を受けなければなりませんか?インターフェイスを使用すると、生活がずっと楽になります。その後、System.Runtime.Remoting.Proxies.RealProxyを使用するか、必要に応じて新しいタイプを作成することができます。Rhino.Mocksは後者 (ライブラリを使用して面倒な作業を行う) を行っていると思います。インターフェイスを使用できる場合は、Rhino.Mocks がどのように実装されているかを確認することから始めるのがよいでしょう。

于 2009-01-17T11:48:31.473 に答える
0

あなたのすべての制限が何であるかわからないので、ここで暗闇の中で突き刺すつもりです. これは、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 を維持するのがどれほど難しい/簡単かということです。

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

于 2009-01-17T13:28:56.403 に答える