DynamicObject ist eine abstrakte Basisklasse (ab .NET 4.0) zum Angeben von dynamischen Verhalten und stellt diese zur Laufzeit bereit. Erbt man in mit seiner Klasse von der Klasse DynamicObject kann man diese dynamisch gestalten. Durch eine Instanziierung mit den dynamic Operators kann man “Nichtdefinierte” Member seiner implementierten Klasse festlegen und setzen. Die Properties werden erst zu Laufzeit ausgewertet. Folgendes Beispiel soll die verdeutlichen:
Meine BasisKlasse Person erbt von DynamicObject und überschreibt die Methoden TryGetMember und TrySetMember. Zusätzlich definiere ich mir ein Dictionary um die Properties die ich später verwenden will zu halten.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
| public class Person : DynamicObject
{
Dictionary<string, object> properties = new Dictionary<string, object>();
public override bool TryGetMember(GetMemberBinder binder, out object result)
{
return properties.TryGetValue(binder.Name, out result);
}
public override bool TrySetMember(SetMemberBinder binder, object value)
{
properties[binder.Name] = value;
return true;
}
public Dictionary<string, object> GetProperties()
{
return properties;
}
} |
Bei der Verwendung lege ich dann die Eigenschaften fest und gebe diese mit der implementierten Methode GetProperties wieder aus:
1
2
3
4
5
6
7
8
9
10
11
12
| dynamic p = new Person();
p.Vorname = "Mario";
p.Nachname = "Priebe";
p.Alter = 37;
p.Internet = "www.biggle.de";
p.EMail = "mp@biggle.de";
foreach (var prop in p.GetProperties())
{
Console.WriteLine(prop.Value.ToString());
} |
Nett, oder? Viel Spass am entwickeln : )