Podsumowując:
jeśli używasz GetProperties()
przeciążenie (bez parametrów), dostaniesz wszystkie publicznych właściwości.
Z drugiej strony, jeśli używasz GetProperties(BindingFlags)
przeciążenie (tej, która przyjmuje parametr BindingFlags
), następnie trzeba określić bitowego lub co najmniej po jednym z każdej grupy następujących flag:
BindingFlags.Instance
/BindingFlags.Static
(przykład vs właściwości statycznych)
BindingFlags.Public
/BindingFlags.NonPublic
(publiczne vs właściwości nie publicznych).
Na przykład, aby uzyskać publicznych właściwości statyczne, trzeba będzie zadzwonić GetProperties(BindingFlags.Public | BindingFlags.Static)
w celu uzyskania wyników. Wywołanie tylko GetProperties(BindingFlags.Public)
lub GetProperties(BindingFlags.Static)
nie zwróci żadnych wyników.
Należy również zauważyć, że określenie BindingFlags.Default
zwróci pustą tablicę .
Szczegółowe informacje można znaleźć w MSDN documentation for GetProperties(BindingFlags):
- należy określić zarówno : filtry flagi mogą być używane do określenia, które zagnieżdżone typy umieścić w poszukiwaniu
Poniższe BindingFlags BindingFlags.Instance
lub BindingFlags.Static
w celu uzyskania zwrotu.
- Podaj
BindingFlags.Public
, aby uwzględnić właściwości publiczne w wyszukiwaniu.
- Podaj
BindingFlags.NonPublic
, aby uwzględnić metody niepubliczne (tj. Prywatne, wewnętrzne i chronione) w wyszukiwaniu. Zwracane są tylko chronione i wewnętrzne metody na klasach bazowych; prywatne metody na klasach bazowych nie są zwracane.
- Podaj
BindingFlags.FlattenHierarchy
aby włączyć do hierarchii publicznych i chronionych statycznych członków; prywatne statyczne elementy w odziedziczonych klasach nie są uwzględniane.
Poniższe BindingFlags modyfikujące flagi mogą być używane do zmiany, jak działa wyszukiwanie:
BindingFlags.DeclaredOnly
szukać tylko właściwości zadeklarowane na rodzaj, właściwości, które nie były po prostu dziedziczone.
'Dla wszystkich, którzy pochodzą z google:' jeśli nadal nie może uzyskać „Właściwości”, nawet po ustawieniu flagi, jeśli jesteś ponownie do C# i nie wiem różnicy między 'Properties' i' Fields', spróbuj użyć 'GetFields()'. Prawdopodobnie cały czas szukasz "pól"! – user1306322
@ user1306322: tylko dla rekordu, "pochodzę z google", a mój kod to: 'var typy = type.GetFields.Select (f => f.FieldType) .Union (type.GetProperties.Select (p => p .PropertyType)); '- a wyniki nadal się liczą 0. – Veverke