Laden...

Reflection und interne Klassen

Erstellt von yngwie vor 17 Jahren Letzter Beitrag vor 17 Jahren 1.037 Views
Y
yngwie Themenstarter:in
238 Beiträge seit 2005
vor 17 Jahren
Reflection und interne Klassen

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

M
1.439 Beiträge seit 2005
vor 17 Jahren

Du kannst mittels Reflection eine Instanz erzeugen(InvokeMember, GetConstructor, etc) und Methoden dieser Klasse aufrufen.

49.485 Beiträge seit 2005
vor 17 Jahren

Hallo yngwie,

Activator.CreateInstance funktioniert nicht?

Den Typ musst du natürlich als String und nicht mit typeof angeben.

herbivore

T
512 Beiträge seit 2006
vor 17 Jahren

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