Czy można dynamicznie komponować klasę z metod zawartych w innych klasach?Dynamicznie skomponuj klasę w języku C#
Na przykład. Klasy A, B i C mają publiczne metody nazwane tak, że można je łatwo zidentyfikować. Muszą one zostać wyodrębnione i dodane do klasy D. Klasa D, która następnie zawiera całą logikę implementacji, może zostać przekazana dalej do systemu, który akceptuje tylko pojedyncze wystąpienie klasy D i dynamicznie wiąże te metody z innymi funkcjami.
Dla jasności, nie jest to dziedziczenie, którego szukam. Dosłownie stwierdzam, że metody o różnych nazwach muszą być wpakowane w jedną klasę. System, przez który go przekazuję, rozumie te konwencje nazewnictwa i dynamicznie je wiąże (to dla mnie czarna skrzynka).
Idę na ścieżkę wyodrębniania metod z A, B i C, dynamicznie łącząc je ze źródłem klasy D w pamięci i kompilując je w nową klasę D, a następnie tworząc instancję D i przechodząc to do przodu.
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(){}
}
Czy istnieje sposób, aby wyodrębnić MethodInfos z klasy A, B i C, a jakoś bezpośrednio dołączyć je do klasy D? Jeśli tak to jak?
Możesz wypisać kod swojej klasy do pliku tekstowego, zapisać go i skompilować w czasie wykonywania. Spójrz na [Klasa CSharpCodeProvider] (http://msdn.microsoft.com/en-us/library/microsoft.csharp.csharpcodeprovider.aspx) i pokrewne tematy, aby dowiedzieć się, jak to zrobić. –
O ile mi wiadomo, nie ma sposobu na skopiowanie implementacji metody. Najprawdopodobniej utworzę klasę pochodną DynamicObject, która będzie zawierała instancje A, B i C, a następnie będzie miała metody imlpementowe klasy pochodnej DynamicObject o tych nazwach i po prostu będzie je proxy dla zawartych obiektów. Zakładając, że rozumiem, o co prosisz. Myślę, że to by działało. – Pete
@JohnWillemse: Multicast deleguje, jeśli twoje metody dzielą ten sam podpis, może ci pomóc – TalentTuner