他のクラスに含まれるメソッドからクラスを動的に作成できますか?Cでクラスを動的に作成する
たとえば、クラスA、B、Cには、簡単に識別できる名前のパブリックメソッドがあります。それらを抽出してクラスDに追加する必要があります。次に、実装ロジックのすべてを含むクラスDは、クラスDの単一インスタンスのみを受け入れ、これらのメソッドを他の関数に動的にバインドするシステムにさらに渡すことができます。
明らかに、これは私が探している継承ではありません。私は文字通り、別の名前のメソッドが1つのクラスに詰め込まれる必要があることを述べています。これらの命名規則を理解し、動的にバインドするシステム(それは私にとってはブラックボックスです)。
私はA、B、Cからメソッドを抽出し、それらをメモリ内のクラスDのソースと動的に結合し、それらを新しいクラスDにコンパイルし、Dのインスタンスを作成して渡すそれは前方にある。
public class A{ public void EXPORT_A_DoSomething(){} }
public class B{ public void EXPORT_B_DoSomethingElse(){}}
public class C{ public void EXPORT_C_DoAnything(){}}
//should become
public class D{
public void EXPORT_A_DoSomething(){}
public void EXPORT_B_DoSomethingElse(){}
public void EXPORT_C_DoAnything(){}
}
クラスA、BおよびCからMethodInfosを抽出し、何らかの形で直接クラスDにそれらをアタッチする方法はありますか?もしそうなら、どのように?
クラスのコードをプレーンテキストファイルに出力して保存し、実行時にコンパイルすることができます。これを行う方法については、[CSharpCodeProvider Class](http://msdn.microsoft.com/en-us/library/microsoft.csharp.csharpcodeprovider.aspx)と関連トピックを参照してください。 –
私が知る限り、メソッドの実装をコピーする方法はありません。おそらく私は、A、B、Cのインスタンスを含むDynamicObject派生クラスを作成し、これらの名前を持つDynamicObject派生クラスのimlpementメソッドを作成し、単にそれらを包含オブジェクトにプロキシするだけです。それは私があなたが何を求めているのかを理解していると仮定します。私はこれがうまくいくと思います。 – Pete
@ JohnWillemse:メソッドが同じシグネチャを共有する場合は、マルチキャストの代理人が役に立ちます。 – TalentTuner