.net反射从接口memberinfo对象查找对象

.net反射从接口memberinfo对象查找对象,.net,reflection,.net-3.5,expression-trees,.net,Reflection,.net 3.5,Expression Trees,好的,我有一个接口,让我们调用它 public interface bar { string Foo; } 还有一个实现接口的类 public fooBar : bar { public string Foo {get; set;} } 然后我有一个属性挂起另一个对象,该对象包含一个包含不同实现的接口“bar”列表,如下所示 public list<bar> listOfBars; 我可以从表达式树中获取memberinfo。memberinfo指向接口方法,其

好的,我有一个接口,让我们调用它

public interface bar {
     string Foo;
}
还有一个实现接口的类

public fooBar : bar {
   public string Foo {get; set;}
}
然后我有一个属性挂起另一个对象,该对象包含一个包含不同实现的接口“bar”列表,如下所示

public list<bar> listOfBars;

我可以从表达式树中获取memberinfo。memberinfo指向接口方法,其类是接口。这几乎是可行的,但我需要知道它的父类是什么,所以我需要从memberinfo对象中查找并查看它在“bar”接口之外调用的方法,类类型是“fooBar”。有没有办法做到这一点,我已经在“监视”窗口中搜索了memberinfo对象,但无法找到父类型。不过,我可能遗漏了一些东西。

我想你把一些概念弄糊涂了。实现接口时,实际上并不是从接口派生类。实际上,您正在这样做:

public class fooBar : object, Foo { }
类将从对象派生,并实现接口Foo。类只能从一个对象类型派生,但可以实现多个接口

您将遇到的另一个问题是接口不能包含字段。您需要更改以下内容:

public interface bar {string Foo;}
对此

public interface bar {string Foo {get;set;} }
现在,假设您更改了所有这些项,您可能需要查看IS关键字。通过执行以下操作,可以检查类是否实现了接口:

object o = new object();
if(o is bar) {
  //do interface bar stuff here
}

抱歉,大部分代码都是用VB编写的,当我输入C#时,我可能没有完全正确的语法。接口的设置与您所说的公共接口栏{string Foo{get;set;}}相同,is关键字也不起作用,因为我不希望所有类都有case语句。当我从反射中获取成员时,比如so propertyMethod=TryCast(expression.Body、System.Linq.Expressions.MemberExpression),它只告诉我树指向的接口和接口属性。我找不到对象的真实类名,或者什么都找不到。
object o = new object();
if(o is bar) {
  //do interface bar stuff here
}