【发布时间】:2010-12-27 15:18:25
【问题描述】:
我正在使用反射来迭代给定类型的所有成员。这种交互必须支持继承,因为大多数类型都会根据需要进行扩展。
我刚刚发现,当迭代 GetMembers 时,类型出现的顺序并不是我所期望的——派生类的类型首先出现,按照它们当前的顺序,然后之后的基类,再次按当前顺序。
来源:
using System;
class Program
{
class SomeClass
{
public string First { get; set; }
public int Second;
}
class AnotherClass : SomeClass
{
public int Third { get; set; }
public string Fourth;
}
public static void Main()
{
var obj = new AnotherClass { First = "asd", Second = 10};
foreach (var member in obj.GetType().GetMembers())
{
Console.WriteLine(member.Name);
}
}
}
输出:
get_Third
set_Third
get_First
set_First
Equals
GetHashCode
GetType
ToString
.ctor
Third
First
Fourth
Second
您可以检查运行here。
我想反转这种情况,使用反射仅从基类中获取类型,然后从派生类中获取。有没有办法做到这一点?
同一行的另一个问题:搜索成员时,属性在前,字段在后。无论如何也要更改此行为,或者创建的元数据将始终按该顺序显示?
谢谢!
【问题讨论】:
标签: c# reflection