2009-08-21 41 views
0

好的,我有一個接口,讓稱之爲.NET反射從接口找到對象的MemberInfo對象

public interface bar { 
    string Foo; 
} 

也有一個實現該接口

public fooBar : bar { 
    public string Foo {get; set;} 
} 

我然後有一個屬性的類掛起另一個包含接口「欄」列表的包含不同實現的對象,如此,

public list<bar> listOfBars; 

現在,當我使用表達式目錄樹/功能,像這樣

function(parentObj x) { x.listOfBars(0).Foo;} 

我能得到的MemberInfo關閉表達式樹的。 memberinfo雖然指向接口方法,其類是接口。這幾乎可行,但我需要知道它的父類是什麼,所以我需要從memberinfo對象中查找並看到它從「bar」接口調用方法,並且類類型是「fooBar」。有沒有辦法做到這一點,我已經通過觀察窗口中的成員信息對象挖掘,無法獲得父類型。我可能會錯過一些東西。

回答

0

我覺得你會感到困惑。當你實現一個接口時,你實際上並不是從接口派生你的類。你實際上是這樣做的:

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 
} 
+0

對不起,大部分代碼是在VB,當我輸入了C#我可能不是有語法正確一路。接口設置就像你說的那樣 public interface bar {string Foo {get; set;}} 另外,IS關鍵字不起作用,因爲我不想讓所有類都有case語句。 當我從反射中獲取成員時,像這樣 propertyMethod = TryCast(expression.Body,System.Linq.Expressions.MemberExpression) 它只告訴我有關樹指向的接口和接口屬性。我無法得到對象真正的類名或什麼都沒有。 – Josh 2009-08-21 19:48:46