Angenommen, ich habe die folgenden zwei Klassen.
%Vor%Wie kann ich feststellen, ob eine bestimmte Eigenschaft eine Pater-Eigenschaft (Inherited) oder eine Child-Eigenschaft ist?
Ich habe es versucht
%Vor%scheint aber, als ob "Ausgenommen" nicht die Gleichheit der Vatereigenschaften und der geerbten Eigenschaften von Child erkennt.
Verwenden Sie die Überladung auf GetProperties
, die BindingFlags
. Fügen Sie das DeclaredOnly
Flag neben den Public
und Instance
Flags ein und Sie sind fertig:
Dies wird eine Eigenschaft, den Namen, zurückgeben.
Beachten Sie, dass Sie mit dieser Lösung den Deklarationstyp nicht überprüfen müssen.
Untersuchen Sie DeclaringType
Eigenschaft auf dem PropertyInfo
. Das sollte Ihnen genug Informationen sagen.
Wenn Sie nur die Eigenschaften, die von einer Klasse, aber nicht den geerbten Klassen definiert sind, möchten, können Sie das Bindungsflag BindingFlags.DeclaredOnly
an die Methode GetProperties
übergeben.
Ref: Ссылка
Bearbeiten 1:
Danke, dass Sie darauf hingewiesen haben, dass dies noch keine funktionierende Antwort ist.
Tatsächlich vergesse ich oft, diese obligatorischen Bindungsflaggen an GetXXX
Methoden zu übergeben.
Und das Programm stürzt immer wie erwartet ab ...
Um die Methode trotzdem funktionieren zu lassen, sollte man immer 1) die Sichtbarkeit / Zugänglichkeit (dh öffentlich oder nicht) und 2) den Umfang (statisch / Instanz) der gewünschten Mitglieder angeben.
Wenn Sie das nicht tun, ist der Rückgabewert von GetXXX
gleich null (oder ein leeres Array, da bin ich mir nicht ganz sicher, aber Sie bekommen die Idee.)
Abschließend, um die Dinge richtig zu machen, sollten Sie:
1. Wählen Sie aus BindingFlags.Public
oder BindingFlags.NonPublic
oder beides.
2. Wählen Sie aus BindingFlags.Instance
oder BidningFlags.Static
oder beides.
3. Kombinieren Sie die ausgewählten Flags aus den vorherigen Schritten mit BindingFlags.DeclaredOnly
In Ihrem Fall wird das Ergebnis die in der Antwort von Rene aufgeführte Zeile sein.
(Ich muss die Antwort bearbeiten, weil es scheint, dass ich noch nicht kommentieren kann ...)
Tags und Links c# reflection system.reflection