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
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也不提供其他洞察力。

关于.net - MemberTypes.Custom和MemberTypes.TypeInfo成员的示例,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18068635/

10-11 05:02