System.Reflection.MemberTypes有八个不同的枚举值。五个直接映射到特定的MemberInfo类(ConstructorInfo,MemberInfo等)。可以将MemberTypes.NestedType视为Type而不是MemberInfo。我正在努力使自己(1)MemberTypes.Custom和(2)MemberTypes.TypeInfo成员成为现实。有没有人有这样的成员的榜样?
最佳答案
public class Foo
{
public class Bar { }
}
对于这两个类,以下内容将成立。
typeof(Foo).MemberType == MemberTypes.TypeInfo
typeof(Foo.Bar).MemberType == MemberTypes.NestedType
TypeInfo
和NestedType
都表明您正在处理一种类型,区别在于该类型是否嵌套。枚举值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也不提供其他洞察力。关于.net - MemberTypes.Custom和MemberTypes.TypeInfo成员的示例,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18068635/