Ist es möglich, eine Klasse aus den Methoden in anderen Klassen dynamisch zu komponieren?Dynamisch komponieren Sie eine Klasse in C#
Zum Beispiel. Die Klassen A, B und C haben öffentliche Methoden, die so benannt sind, dass sie leicht identifiziert werden können. Sie müssen extrahiert und zur Klasse D hinzugefügt werden. Klasse D, die dann die gesamte Implementierungslogik enthält, kann weiter in ein System übertragen werden, das nur eine einzige Instanz der Klasse D akzeptiert und diese Methoden dynamisch an andere Funktionen bindet.
Um klar zu sein, das ist nicht Vererbung, die ich suche. Ich behaupte buchstäblich, dass Methoden mit unterschiedlichen Namen in eine Klasse eingefügt werden müssen. Das System, an das ich es weitergebe, versteht diese Namenskonventionen und bindet sie dynamisch (es ist eine Blackbox für mich).
Ich gehe den Pfad der Extrahierung der Methoden aus A, B und C hinunter, kombiniere sie dynamisch mit der Quelle der Klasse D im Speicher und kompiliere sie in eine neue Klasse D und erstelle dann eine Instanz von D und passiere es vorwärts.
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(){}
}
Gibt es eine Möglichkeit, die MethodInfos von Klasse A, B und C und irgendwie direkt befestigen sie an der Klasse D zu extrahieren? Wenn das so ist, wie?
Sie können den Code Ihrer Klasse in eine einfache Textdatei ausgeben, speichern und zur Laufzeit kompilieren. Werfen Sie einen Blick auf die [CSharpCodeProvider-Klasse] (http://msdn.microsoft.com/en-us/library/microsoft.csharp.csharpcodeprovider.aspx) und verwandte Themen, um zu erfahren, wie Sie dies tun. –
Soweit ich weiß, gibt es keine Möglichkeit, die Implementierung einer Methode zu kopieren. Ich würde wahrscheinlich eine DynamicObject-abgeleitete Klasse erstellen, die Instanzen von A, B und C enthält, und dann die von DynamicObject abgeleiteten Klassenimplement-Methoden mit diesen Namen verwenden und sie einfach den enthaltenen Objekten zuweisen. Das vorausgesetzt, ich verstehe, was Sie fragen. Ich denke, das würde funktionieren. – Pete
@JohnWillemse: Multicast-Delegaten, wenn Ihre Methoden die gleiche Signatur teilen, kann hilfreich für Sie sein – TalentTuner