【发布时间】:2009-11-19 10:28:48
【问题描述】:
我有以下类结构:
public abstract class AbstractFoo
{
public virtual void Prepare()
{
}
}
public class Foo : AbstractFoo
{
public override void Prepare()
{
}
}
public class Bar : Foo
{
public override void Prepare()
{
}
}
public class ClassThatUses
{
public Foo Foo;
}
var classThatUsesInstance = new ClassThatUses { Foo = new Bar (); }
在 ClassThatUses 中,我需要调用(通过反射 - 强制)类 Bar 的 Prepare 方法。
我需要编写一个反射代码来调用 Bar 而不是 foo 的 Prepare 方法,而不是问号 (???)。
基本上应该是这样的:
classThatUsesInstance.GetType.GetProperties()[0]
-> somehow understand that it's actually Bar, but not Foo.
-> call method (which i know how to do, i just need the RIGHT method to be used)
不知道是Bar,还是BarBar,还是BarBarBar。我需要找出分配字段的 REAL 类型,而不是输入它被强制转换的类型。
这有可能吗? 或者至少有可能在运行时找出 Foo 字段的真实类型?
附言我意识到,如果没有反思,它将被称为 - 没问题。这更像是一种理论。
更新:http://msdn.microsoft.com/en-us/library/a89hcwhh.aspx 请注意,您不能使用基类中的 MethodInfo 对象来调用派生类中的重写方法,因为后期绑定无法解析重写。 这是否意味着问题无法解决?
【问题讨论】:
标签: c# reflection