2010-07-21 63 views
3

我有這樣的接口:如何瞭解某個接口是否來自特定的接口?

public interface IViewA : IViewB, IViewC 
{ 
    byte prop { get; set; } 
} 

和我有一個這樣的通用方法:

public void OpenPopup<T>(WindowState state) 
{ 
    if ((typeof(T) as IViewC)!=null) 
    { 
     //Process A 
    } 
    else 
    { 
     //Process B 
    } 

}

雖然我發送T作爲從IViewC,過程導出的界面A沒有被處理。

那麼如何通過反射在運行時學習一個接口是否從其他接口派生?

感謝

+1

'typeof(t)'將永遠是一個System.Type – Rup 2010-07-21 17:08:34

回答

4

請嘗試以下

if (typeof(IViewC).IsAssignableFrom(typeof(T)) { 
    ... 
} 
2

代替typeof使用isAssignableFrom

+0

請顯示示例代碼。我在問,因爲我會認爲答案都需要。 – 2010-07-21 17:16:41

0
if ((typeof(T) as IViewC)!=null) 

這是不對的。你寫什麼測試typeof(T)返回的Type對象是否爲IViewC,這顯然不是。

你想:

if (typeof(IViewC).IsAssignableFrom(typeof(T)) 
+0

我相信這也是錯誤的。 C#中的「is」運算符只能用於參考值。 T是一個泛型類型參數。 – JaredPar 2010-07-21 17:10:29

+0

@Jared,我更新以解決這個問題。 – 2010-07-21 17:11:07

2

嘗試類似typeof(IViewC).IsAssignableFrom(typeof(T))

現在你正在試圖對待typeof(T),這是一個System.Type作爲IViewC,這將無法正常工作。

1

typeof(T) as IViewC是完全錯誤的。您正試圖從Type投射到IViewC,這將始終失敗,始終導致爲空。

你想typeof(T).GetInterfaces(),並查看返回的列表,看看你的接口是否在那裏。

+0

這會工作,但效率不高。 – 2010-07-21 17:18:28

相關問題