我有一个继承自基类(BaseClass)的类(Descendant1)。将子类的实例传递给将BaseClass作为参数的方法。然后使用反射,它调用对象上的属性。
public class BaseClass { }
public class Descendant1 : BaseClass
{
public string Test1 { get { return "test1"; } }
}
public class Processor
{
public string Process(BaseClass bc, string propertyName)
{
PropertyInfo property = typeof(BaseClass).GetProperty(propertyName);
return (string)property.GetValue(bc, null);
}
}
我的问题是这个。在 Process 方法中,是否可以找出对象的真实位置(Descendant1),然后声明该类型的对象(可能使用Reflection)并将BaseClass参数强制转换为它,然后进行反射杂技吧?
感谢。
答案 0 :(得分:6)
我不确定我是否理解你的问题,但也许你正在考虑这样的事情:
public string Process(BaseClass bc, string propertyName)
{
PropertyInfo property = bc.GetType().GetProperty(propertyName);
return (string)property.GetValue(bc, null);
}
bc.GetType()得到实际的bc类型(当你通过Descendant1时,它将是Descendant1而不是BaseClass)。