Reflection fields und properties
-
Hallo,
ich habe ein Problem mit Reflection:
Ich analysiere eine Assembly und suche mir alle Klassen. Von den Klassen benötige ich alle fields und properties. Das klappt so weit auch.
Bei den fields bekomme ich über IsPublic, IsPrivate usw. auch raus, welche Sichtbarkeit diese haben.
Bei properties (sprich PropertyInfo) fehlen diese. Attributes gibt es auch nicht.Wie komme ich bei Properties an die Sichtbarkeit?
-
Die Sichtbarkeit kann man doch während der Suche einstellen, oder?
void* schrieb:
Bei den fields bekomme ich über IsPublic, IsPrivate usw. auch raus, welche Sichtbarkeit diese haben.
Das ist uzu kompliziert. Wenn man den Typ hat kann man über
type.GetProperties(BindingFlags.###)
.Wenn du von allen die Sichtbarkeit haben möchstest
musst dieget
undset
Methoden einzeln abfragen.
GetGetMethod() und äquvalent für set.
-
rhom@uni schrieb:
Die Sichtbarkeit kann man doch während der Suche einstellen, oder?
Ich will aber ALLE, brauche aber für meinen Generator die genauen Sichtbarkeiten.
rhom@uni schrieb:
Das ist uzu kompliziert. Wenn man den Typ hat kann man über type.GetProperties(BindingFlags.###).
Das verstehe ich leider nicht...
Wenn ich das z.B. mit BindingFlags.Public mache, bekomme ich immer nur leere PropetyInfo[]s (auch wenn der Typ z.B. ein public field ist)?rhom@uni schrieb:
Wenn du von allen die Sichtbarkeit haben möchstest
musst dieget
undset
Methoden einzeln abfragen.Und bei sowas müsste ich dann für den setter private und für den getter public bekommen, oder?
class Foo { // Auto property public int Bar{ get; private set; } }
Was bedeutet denn die Sichtbarkeit bei einem Property dann eigentlich? Die default Sichtbarkeit für getter und setter?
-
Bin auf den Draht gekommen, dass ich ja einfach mal den Compiler fragen könnte...
Also zu meiner Frage :D:
Die Sichtbarkeit eines Property überträgt sich auf getter und setter. Allerdings darf ich bein einem der beiden die Sichtbarkeit ändern. Dabei muss diese jedoch restriktiver sein als die des Properties.
Sieht man auch gut im .NET-Reflector.Euer C#-Noob void*