Hallo Community,
ich möchte gerne mittels Reflection den Wert einer Variable auslesen. Das Problem dabei ist dass der betreffende Typ bzw. Klasse als "internal" markiert ist. Selbst wenn ich mit Reflection an diese Variable ran komme, kann ich keine Instanz davon erstellen, weil der Compiler diesen Typ nicht kennt, bzw. wegen des protection levels der Variablen ...
Beispiel:
Aus einer Instanz der Klasse "System.Windows.Forms.ToolStripItem" möchte ich gerne die Variable namens "toolStripItemInternalLayout" auslesen und diese etwas genauer unter die Lupe nehmen. Dies mache ich so:
object obj = this.GetField(typeof(ToolStripItem), "toolStripItemInternalLayout");
if (obj != null)
{
ToolStripItemInternalLayout internalLayout = obj as ToolStripItemInternalLayout;
}
private object GetField(Type type, string fieldName)
{
BindingFlags flags = BindingFlags.CreateInstance | BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic;
object field = type.GetField(fieldName, flags);
return field;
}
Die Klasse "ToolStripItemInternalLayout" ist als internal deklariert und deswegen läuft der obige cast schief.
Weiss vielleicht jemand wie ich sonst eine Instanz davon erzeugen bzw. auf die "Innereien" dieser Klasse zugreifen kann ???
Danke für jede konstruktive Hilfe
Du kannst mittels Reflection eine Instanz erzeugen(InvokeMember, GetConstructor, etc) und Methoden dieser Klasse aufrufen.
Hallo yngwie,
Activator.CreateInstance funktioniert nicht?
Den Typ musst du natürlich als String und nicht mit typeof angeben.
herbivore
Den Typ kannst du natürlich nicht so direkt verwenden. Du kannst nur z.B. alles in eine Variable vom Typ object speichern, und musst dann alle Methoden und Properties über Reflection aufrufen.
e.f.q.
Aus Falschem folgt Beliebiges