.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
}