![](/img/trans.png)
[英]What's the difference between Type.IsSubclassOf and TypeInfo.IsSubclassOf?
[英]What's the difference between DeclaredMembers from TypeInfo and GetMembers from Type?
下面是一些源代码:
public abstract class Type : MemberInfo, _Type, IReflect {
public MemberInfo[] GetMembers();
public MethodInfo[] GetMethods();
public FieldInfo[] GetFields();
public PropertyInfo[] GetProperties();
public ConstructorInfo[] GetConstructors();
...
}
public abstract class TypeInfo : Type, IReflectableType {
public virtual IEnumerable<MemberInfo> DeclaredMembers { get; }
public virtual IEnumerable<MethodInfo> DeclaredMethods { get; }
public virtual IEnumerable<FieldInfo> DeclaredFields { get; }
public virtual IEnumerable<PropertyInfo> DeclaredProperties { get; }
public virtual IEnumerable<ConstructorInfo> DeclaredConstructors { get; }
...
}
我的问题是,在 Type 中使用 GetXXX 和在 TypeInfo 中使用对应的 DeclaredXXX 有什么区别? 它们看起来是一样的,如果您已经在Type
中有一个批次,为什么考虑到TypeInfo
继承自Type
,我们还要在TypeInfo
中添加另一个批次?
根据源中使用的DeclaredOnly
BindingFlags,似乎只考虑“在提供的类型层次结构级别声明”的成员。 因此不考虑继承的成员。
这证明这是真的:
void Main()
{
TypeInfo fooType = typeof(Foo).GetTypeInfo();
Console.WriteLine("Declared properties");
foreach(var m in fooType.DeclaredProperties)
{
Console.WriteLine(m.Name);
}
Console.WriteLine();
Console.WriteLine("Properties");
foreach (var m in fooType.GetProperties())
{
Console.WriteLine(m.Name);
}
}
public class Foo: Bah
{
public string Name{get;set;}
}
public class Bah
{
public int Id{get;set;}
}
这打印:
Declared properties
Name
Properties
Name
Id
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.