【发布时间】:2012-05-20 00:39:15
【问题描述】:
我有 2 个接口和 2 个类,我通过反射进行调查:
- 父母亲
- IChild - 派生自 IParent
- 家长
- 子 - 派生自父
对我来说奇怪的是,当我查看 IChild 类型的反射时,我没有找到 IParent 方法。
应用于 Child 类型的相同代码按预期工作 - 反射显示 Parent 方法。
interface IParent
{
void ParentMethod();
}
interface IChild : IParent
{
void ChildMethod();
}
class Parent
{
public void ParentMethod(){}
}
class Child : Parent
{
public void ChildMethod(){}
}
void Main()
{
//investigate derived interface
Type t = typeof(IChild);
var info = t.GetMethod("ChildMethod");//ok
Console.WriteLine(info);
info = t.GetMethod("ParentMethod");//returns null!
Console.WriteLine(info);
//investigate derived class
t = typeof(Child);
info = t.GetMethod("ChildMethod");//ok
Console.WriteLine(info);
info = t.GetMethod("ParentMethod");//ok
Console.WriteLine(info);
}
请解释这种行为?
是否有任何解决方法可以从派生接口的类型中反映基接口的方法?
【问题讨论】:
-
Parent没有实现IParent...错字? -
好问题。我从阅读答案中学到了一些东西。还不需要知道它,但知识就是力量......
-
@Jamiec 不,这不是错字。只是展示了反映继承的类和接口的区别。
标签: c# inheritance reflection interface