2013-08-05 8 views
6

Istnieje osiem różnych wartości wyliczeniowych dla System.Reflection.MemberTypes. Pięć map bezpośrednio do określonych klas MemberInfo (ConstructorInfo, MemberInfo, itp.). Typ MemberTypes.NestedType może być traktowany jako typ, a nie element MemberInfo. Próbuję uzyskać głowę (1) MemberTypes.Custom i (2) MemberTypes.TypeInfo członków. Czy ktoś ma przykład takich członków?Przykład elementu MemberTypes.Custom i MemberTypes.TypeInfo

+0

Dla TypeInfo - czy zdałeś sobie sprawę, że 'System.Type: System.Reflection.MemberInfo'? –

Odpowiedz

4
public class Foo 
{ 
    public class Bar { } 
} 

Poniższe dwie klasy będą prawdziwe.

typeof(Foo).MemberType == MemberTypes.TypeInfo 
typeof(Foo.Bar).MemberType == MemberTypes.NestedType 

Zarówno TypeInfo i NestedType wskazują, że mamy do czynienia z typem z rozróżnieniem, czy typ jest zagnieżdżony lub nie. Wartość wyliczeniowa TypeInfo jest zgodna z konwencją nazewnictwa, podczas gdy rzeczywisty podtyp MemberInfo to Type. Z jednej strony Type powinno być nazywane TypeInfo, aby zachować konwencję nazewnictwa, z drugiej strony wydaje się nieco wątpliwe, czy Type pochodzi od MemberInfo w pierwszej kolejności. Ale tak właśnie jest. Być może członek w MemberInfo powinien być lepiej zrozumiany jako element złożenia lub typu, a nie tylko członek typu.

Od .NET 4.5 istnieje nowa podklasa TypeInfo dziedzicząca od Type i dostępna za pomocą Type.GetTypeInfo() extension method; zobacz tam dla rozróżnienia.

Nie jestem pewien co do MemberTypes.Custom, ale patrząc na CLI specification, szczególnie II.10.2, może to być przypadek, który odnosi się do atrybutów niestandardowych lub innych niestandardowych danych związanych z typem. Patrząc na .NET reference source code nie zapewnia również dodatkowego wglądu.