[英]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.