Die Powerbuilder-Entwickler kennen das Schlüsselwert DYNAMIC um beim Aufruf einer Methode erst zur Laufzeit prüfen zu lassen ob diese bereits vorhanden ist. In C# gibt es ab der Version 4.0 ein ähnliches Hilfsmittel um späte Bindung zu vereinfachen.
Das Schlüsselwor DYNAMIC gibt es in C# jetzt auch. Aber anstatt es, wie in Powerbuilder, vor die Methode oder den Event zu stellen wird es hier als Datentyp eingesetzt.
Powerbuilder:
powerobject lpo_powerobject n_test lnv_test lnv_test = CREATE n_test lpo_powerobject = lnv_test lpo_powerobject.DYNAMIC of_helloWorld ( )
C#
dynamic myobject; myojbject = new TestA(); myobject.HelloWorld ( );
Das heißt natürlich im Umkehrschluss, dass man jetzt jede beliebige Methode als Aufruf programmieren kann ohne dass der Compiler aufmuckt. Ich würde sagen: Fluch und Segen
Daraus folgt aber auch, dass ich jede belibige Klasse unabhängig von Vererbungshierarchie in myObject füllen kann an der die Methode HelloWorld existiert.
Dieses Listing soll das Verhalten verdeutlichen:
static void Main(string[] args) { dynamic work = null; work = new TestA(); work.HelloWorld(); work = new TestB(); work.HelloWorld(); Console.Read(); } public class TestA { public void HelloWorld() { Console.WriteLine("Hallo ich bin TestA"); } } public class TestB { public void HelloWorld() { Console.WriteLine("Hallo ich bin TestB"); } }
Fazit
Dynamic ist eine schöne Sache um späte Bindung zu vereinfachen. Früher oder später führt es aber, bei zu häufiger Anwendung, zum Chaos. Also: Immer Verantwortungsbewusst einsetzen