Dynamic in C# 4.0

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 ;)

Hinterlasse eine Antwort

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *

Du kannst folgende HTML-Tags benutzen: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>