Dynamic in C# 4.0, Teil I: Einführung

Von Mario Meir-Huber Autor Feed 4. November 2009 10:18

Eines der Neuerungen in C# 4 ist die DLR (Dynamic Language Runtime). Hierbei ist das “dynamic” Keywort eines der zentralen Dinge. Ein dynamisches Objekt ist “ExpandoObject”. Dies kann man sich folgendermaßen generieren:

//dynamische Person
dynamic aPerson = new ExpandoObject();
aPerson.Name = "Mario Meir-Huber";
aPerson.Age = 25;

Wie man dabei sehen kann, wurde “Name” und “Age” dynamisch hinzugefügt. Es ist auch möglich, auf alle Properties in diesem dynamischen Objekt zuzugreifen. Das ExpandoObject implementiert ein “IDictionary<string, object>” um auf alle Members zuzugreifen. Somit kann man Membername, Inhalt und sogar Typ ausgeben!

private static void WriteDynobj(dynamic person)
{
    IDictionary<string, object> p = person;

    foreach (var itm in p)
    {
        Console.WriteLine(string.Format("{0} ist vom Typ {1} und hat als Wert {2}", itm.Key, itm.Value.GetType(), itm.Value));
    }
}

Dies sieht dann in der Konsole folgendermaßen aus:

image

Damit es auch ausgegeben wird, muss aber vorher die Methode “WriteDynobj” aufgerufen werden:

Console.WriteLine("Durchgang 1\n");

//ausgabe der properties
WriteDynobj(aPerson);

Natürlich wäre das ganze nicht so spektakulär wenn man nicht auch Methoden entfernen könnte. Hierfür greift man einfach wieder auf das Dictionary zu und entfernt einen Key

private static void DeleteProperty(dynamic person, string property)
{
    IDictionary<string, object> p = person;

    p.Remove(property);
}

Das ganze sollte auch noch aufgerufen werden:

//ich bin zu alt - alter weg!
DeleteProperty(aPerson, "Age");

Console.WriteLine("\nDurchgang 2\n");

WriteDynobj(aPerson);

Noch besser ist es aber, wenn Methoden hinzu kommen. Dies wird auch einfach mit der “Add” Methode des Dictionaries geregelt:

private static void AddProperty(dynamic person)
{
    IDictionary<string, object> p = person;

    p.Add(new KeyValuePair<string, object>("Alter", 12));
}

… und natürlich auch wieder aufrufen:

//machen wir was dazu ... 
Console.WriteLine("\nDurchgang 3\n");

AddProperty(aPerson);

WriteDynobj(aPerson);

Da das ganze ja sehr dynamisch ist kann man auch den soeben neu hinzugefügten Member im Code schreiben:

//noch besser:

aPerson.Alter++;

Console.WriteLine(string.Format("Ein Jahr mehr = {0}", aPerson.Alter));

Console.ReadLine();

image

Dies sind nur einige der vielen Vorteile der DLR in C# 4.0. Was es sonst noch so gibt und was MemberBinder, IndexBinder und dergleichen sind kommt in den nächsten Posting.

Client-Development | General

Tags:  Feed Tag,  Feed Tag

Comments

>

11/4/2009 7:26:44 PM #

Hallo Mario,

gute Einführung, leicht zu verstehen und auch interessant. Ein kleines Problem habe ich aber entdeckt. Du schreibst: "Natürlich wäre das ganze nicht so spektakulär wenn man nicht auch Methoden entfernen könnte. ...", zeigst dann aber Beispiele mit Properties: "p.Remove(property);".

Das gleiche dann auch mit hinzufügen von Properties in dem nächsten Beispiel.
Sonst super, keep blogging und warte schon auf die nächsten Teile.

George Austria

>

11/5/2009 2:21:33 PM #

Hi George,

danke für Deinen Beitrag!

wie ich das geschrieben habe, habe ich schon an den nächsten Blogeintrag gedacht -> es geht nämlich nicht nur mit Properties sondern auch mit Methoden. Die Bezeichnung "Members" wäre in diesem Fall also die einzig richtige, da dies für Properties und Methoden/Funktionen steht!

Viele Grüße,

Mario

Mario Meir-Huber Austria

>

11/15/2009 1:04:04 PM #

Pingback from biggle.de

Dynamics .NET 4.0 | Biggle's Blog

biggle.de

Add comment


(Will show your Gravatar icon)

  Country flag

biuquote
  • Comment
  • Preview
Loading



Windows Phone 7

Was halten Sie von Windows Phone 7



Show Results

Werbepause

CodeFest.at on Facebook

Calendar

<<  March 2010  >>
MoTuWeThFrSaSu
22232425262728
1234567
891011121314
15161718192021
22232425262728
2930311234

View posts in large calendar

www.microsoft.com/austria | © 2009 Microsoft Corporation. Alle Rechte vorbehalten.
BlogEngine.NET 1.5.0.7 powered by atwork