相关疑难解决方法(0)

GetProperties()返回接口继承层次结构的所有属性

假设以下假设的继承层次结构:

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" 的对象数组.

有没有一种简单的方法来查找接口的继承层次结构中的所有属性,如第一个示例中所示?

.net c# reflection

88
推荐指数
3
解决办法
4万
查看次数

如何正确反映基接口方法

我通过Reflection调查了2个接口和2个类:

  • IParent
  • 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);
}
Run Code Online (Sandbox Code Playgroud)

请解释一下这种行为?

是否有任何解决方法可以从派生接口的类型中反映基接口的方法?

c# reflection inheritance interface

13
推荐指数
3
解决办法
6228
查看次数

标签 统计

c# ×2

reflection ×2

.net ×1

inheritance ×1

interface ×1