Blog Home  Home Feed your aggregator (RSS 2.0)  
artiso Blog - Dynamische Instanz eines Typs erzeugen und befüllen
Neues rund um's Thema .Net
 
 Tuesday, February 20, 2007

In dem folgenden Beispiel wird aus einer Auflistung der Typ der Elemente ermittelt und anschließend eine neue Instanz dieses Typs angelegt. Dann werden die Properties die über DisplayMember und ValueMember übergeben wurden mit Werten befüllt. Damit kann die Liste ergänzt werden, ohne Zugriff auf den Datentyp zu haben. Einzige Voraussetzung ist, dass in der DataSource bereits Elemente vorhanden sind.

foreach (cListEntry item in Items)
{
Type
t = ((IList)dataSource)[0].GetType();
object o = Activator.CreateInstance(t);
if (this.DisplayMember!= null && this.DisplayMember!= "")
   
t.GetProperty(
this.DisplayMember).SetValue(o, item.Text, null);
if (this.ValueMember!= null && this.ValueMember!= "")
    t.GetProperty(
this.ValueMember).SetValue(o, item.Value, null);
}

 

Nachtrag:

Wenn der Typ, von dem eine neue Instanz erzeugt werden soll, keinen parameterlosen Konstruktor hat, funktioniert das obige Beispiel nicht. Abhilfe kann man hier schaffen, indem man einen parameterlosen Konstruktor anlegt und diesen als private deklariert. Dadurch kann ich beim Instanzieren weiterhin sicherstellen, dass Pflichtangaben gemacht werden, weil der parameterlose Konstruktor ja nicht sichtbar ist.

Mit object o = Activator.CreateInstance(t, true); kann nun in obigem Beispiel eine Instanz des Objektes durch Aufruf des privaten parameterlosen Konstruktors erzeugt werden. Hier muss man natürlich jetzt sicherstellen, dass die Pflichtobjekte entsprechend befüllt werden.

Tuesday, February 20, 2007 12:09:50 AM (Mitteleuropäische Zeit, UTC+01:00)  #    Comments [0]    | 
Copyright © 2008 Thomas. All rights reserved.
DasBlog 'Portal' theme by Johnny Hughes.
Pick a theme: