假设以下假设的继承层次结构:
public interface IA
{
int ID { get; set; }
}
public interface IB : IA
{
string Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
使用反射并进行以下调用:
typeof(IB).GetProperties(BindingFlags.Public | BindingFlags.Instance)
Run Code Online (Sandbox Code Playgroud)
只会产生接口的属性IB,即" Name".
如果我们要对以下代码进行类似的测试,
public abstract class A
{
public int ID { get; set; }
}
public class B : A
{
public string Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
该调用typeof(B).GetProperties(BindingFlags.Public | BindingFlags.Instance)将返回PropertyInfo" ID"和" Name" 的对象数组.
有没有一种简单的方法来查找接口的继承层次结构中的所有属性,如第一个示例中所示?
我通过Reflection调查了2个接口和2个类:
对我来说奇怪的是,当我通过对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);
}
Run Code Online (Sandbox Code Playgroud)
请解释一下这种行为?
是否有任何解决方法可以从派生接口的类型中反映基接口的方法?