Kolumne: C# im Fokus

Funktion und Verwendung der Klasse ExpandoObject
Kommentare

Mit .NET 4.0 wurde die neue Klasse ExpandoObject eingeführt. Zugeordnet werden kann die Klasse dem Bereich der Dynamic-Language-Runtime-(DLR-)Erweiterungen in .NET. Wie der Name ExpandoObject schon vermuten lässt, kann das Objekt dynamisch zur Laufzeit erweitert werden.

Die ExpandoObject-Klasse definiert zunächst einen Typ ohne spezielle eigene Mitglieder. Nachdem das Objekt angelegt wurde, können ihm dynamisch neue Eigenschaften und Methoden hinzugefügt werden. Damit das funktioniert, muss das in der letzten C#-Kolumne bereits erläuterte neue Schlüsselwort dynamic verwendet werden. Dieses Schlüsselwort wird bei Verwendung der ExpandoObject-Klasse benötigt, um einen dynamischen Typ zu deklarieren. Ein wenig vergleichbar ist die Klasse ExpandoObject mit einem anonymen Typ, der mittels LINQ-Abfrage innerhalb der select-Anweisung erstellt werden kann (Listing 1).

Listing 1

var people = from person in list
              where person.Salutation.Equals("Frau")
              select new {
                Name = person.FirstName+" " + person.LastName
              };  

Auch hier wird zu Laufzeit ein neuer Typ definiert. Allerdings kann dieser Typ nicht den lokalen Gültigkeitsbereich verlassen, es können keine Methoden hinzugefügt werden und er ist nicht dynamisch erweiterbar.

Verwendung von ExpandoObject

Da die Klasse ExpandoObject dem Sprachkonzept der dynamischen Sprachen zuzuordnen ist, verlässt man bei der Verwendung die Sicherheit der strikten Typprüfung. Daher sollte die Klasse immer nur zum Einsatz kommen, wenn kein konkreter Typ vorhanden ist oder verwendet werden kann. Das Beispiel in Listing 2 zeigt ein erstes einfaches Beispiel, in dem auch schon die möglichen Probleme deutlich werden.

Listing 2

var people = from person in list
              where person.Salutation.Equals("Frau")
              select new {
                Name = person.FirstName+" " + person.LastName
              };  

Unsere Redaktion empfiehlt:

Relevante Beiträge

Meinungen zu diesem Beitrag

X
- Gib Deinen Standort ein -
- or -