【发布时间】:2015-04-17 23:15:53
【问题描述】:
我有一个简单的程序,它使用反射打印出所提供类的属性和值。
class BaseClass
{
public string A
{
get { return "BaseClass"; }
}
}
class Child1 : BaseClass
{
public string Child1Name {
get { return "Child1"; }
}
}
class Child2 : BaseClass
{
public string Child2Name
{
get { return "Child2"; }
}
}
class Program
{
static void Main(string[] args)
{
var child1 = new Child1();
var child2 = new Child2();
SomeMethod(child1);
SomeMethod(child2);
Console.ReadKey();
}
static void SomeMethod(BaseClass baseClass)
{
PrintProperties(baseClass);
}
static void PrintProperties<T>(T entity)
{
var type = typeof(T);
foreach (var targetPropInfo in type.GetProperties())
{
var value = type.GetProperty(targetPropInfo.Name).GetValue(entity);
Console.WriteLine("{0}: {1}", targetPropInfo.Name, value);
}
Console.WriteLine("");
}
}
问题在于它只打印出BaseClass 属性,因为我使用泛型并将BaseClass 传递给PrintProperties 方法。
输出:
A:基类
A:基类
如何访问子类的属性?我想要这样的输出:
A:基类
Child1Name: Child1A:基类
Child2Name: Child2
【问题讨论】:
-
试试
typeof(T),而不是entity.GetType()。GetType()将返回对象的实际类型。 -
这正是我想要的。谢谢
-
主题涵盖在stackoverflow.com/questions/983030/… 中,但它并没有明确涵盖泛型的差异(以绝对初学者可以理解的方式),所以不要关闭为 dup。
标签: c# generics reflection