Reflection Methodinhalte Statische Klassen

10/06/2008 - 15:30 von Boas Enkler | Report spam
Hi

momentan entwickle ich an einem kleinen OpenSource Projekt, welches
mir für die tàgliche Arbeit nützliche Hilfsmittel anbietet.

U.a. ermittle ich von einer Methode alle Types die diese Verwendet.
Die meisten dinge bekommt man ja relativ einfach via Reflection raus.
so z.bsp. auch die Typen der Lokalen Variablen in der Methode.

Wie kommt man aber nun auf Typen die mit einem statische aufruf im
Code vorkommen?

Also z.bsp, folgendes:

public void Test()
{
object a;
GC.Collect();
}

nun müsste meine Methode die diese Methode scannt folgende Elemente
erkennen:
- System.Void
- System.Object
- GC

die ersten beide fàllen stellen kein Problem dar aber auf GC komme ich
nicht. Hat jemand einen Tipp wie ich auf diese Typen ermitteln kann ?

Muss ich dazu manuell über den IL Code ? Oder gibts einen eleganteren
Weg?
 

Lesen sie die antworten

#1 Elmar Boye
11/06/2008 - 09:57 | Warnen spam
Hallo Boas,

Boas Enkler schrieb:
U.a. ermittle ich von einer Methode alle Types die diese Verwendet.
Die meisten dinge bekommt man ja relativ einfach via Reflection raus.
so z.bsp. auch die Typen der Lokalen Variablen in der Methode.

Wie kommt man aber nun auf Typen die mit einem statische aufruf im
Code vorkommen?

Also z.bsp, folgendes:

public void Test()
{
object a;
GC.Collect();
}

nun müsste meine Methode die diese Methode scannt folgende Elemente
erkennen:
- System.Void
- System.Object
- GC

die ersten beide fàllen stellen kein Problem dar aber auf GC komme ich
nicht. Hat jemand einen Tipp wie ich auf diese Typen ermitteln kann ?

Muss ich dazu manuell über den IL Code ?



Ich habe mich damit bisher nicht in solcher Tiefe beschàftigt,
aber ich denke da wirst Du die IL des MethodBody untersuchen müssen.
Eine Basis könnte der CodeProject Artikel sein:
<URL:http://www.codeproject.com/KB/cs/sd...r.aspx>
"Parsing the IL of a Method Body"

Darüber kàmst Du an den Call auf GC.Collect()

Gruß Elmar

Ähnliche fragen