簡體   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