2013-08-05 20 views
6

System.Reflection.MemberTypes有八種不同的枚舉值。五直接映射到特定的MemberInfo類(ConstructorInfo,MemberInfo等)。 MemberTypes.NestedType可以被認爲是Type而不是MemberInfo。我試圖讓我的頭(1)MemberTypes.Custom和(2)MemberTypes.TypeInfo成員。有沒有人有這樣的成員的例子?MemberTypes.Custom和MemberTypes.TypeInfo成員的一個示例成員

+0

對於TypeInfo - 你是否意識到'System.Type:System.Reflection.MemberInfo'? –

回答

4
public class Foo 
{ 
    public class Bar { } 
} 

有了這兩個類,以下將是正確的。

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

兩個TypeInfoNestedType表明您正在處理與區分類型是否是嵌套的或不是一個類型。枚舉值TypeInfo只是遵循命名約定,而MemberInfo的實際子類型爲Type。一方面,Type應該叫做TypeInfo來堅持命名約定,另一方面,Type首先來自MemberInfo似乎有點可疑。但這只是它的方式。可能在MemberInfo中的成員應該更好地理解爲程序集或類型成員,而不僅僅是類型成員。

從.NET 4.5開始,有一個新的子類TypeInfo繼承自Type並且可以使用Type.GetTypeInfo() extension method訪問;看到那裏的區別。

我不確定MemberTypes.Custom,但看着CLI specification,尤其是II.10.2,它可能是這種情況,這是指自定義屬性或其他與類型相關的自定義數據。看看.NET reference source code也不提供額外的見解。