7

System.Reflection.MemberTypes 有八个不同的枚举值。五个直接映射到特定的 MemberInfo 类(ConstructorInfo、MemberInfo 等)。MemberTypes.NestedType 可以被认为是 Type 而不是 MemberInfo。我试图了解 (1) MemberTypes.Custom 和 (2) MemberTypes.TypeInfo 成员。有没有人有这样的成员的例子?

4

1 回答 1

4
public class Foo
{
   public class Bar { }
}

对于这两个类,以下将是正确的。

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

两者TypeInfo和都NestedType表明您正在处理一个类型,区分该类型是否嵌套。枚举值TypeInfo只是遵循命名约定,而实际的子类型MemberInfoType. 一方面Type应该被称为TypeInfo坚持命名约定,另一方面它似乎有点可疑,这Type是从一开始就派生出来MemberInfo的。但事实就是如此。也许成员MemberInfo应该更好地理解为程序集或类型成员,而不仅仅是类型成员。

从 .NET 4.5 开始,有新的子类TypeInfo继承自扩展方法Type并可以使用Type.GetTypeInfo()扩展方法访问;看到那里的区别。

我不确定MemberTypes.Custom但查看CLI 规范,尤其是 II.10.2,可能是指与类型关联的自定义属性或其他自定义数据。查看.NET 参考源代码也不能提供额外的见解。

于 2014-04-06T03:20:06.610 回答