繁体   English   中英

TypeInfo 中的 DeclaredMembers 和 Type 中的 GetMembers 有什么区别?

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM