2011-06-30 34 views
3

我正在嘗試編寫一個方法,它返回一個實現接口的類的列表,但不能這樣做。如何獲得在CodeRush中實現接口的類?

一些方法像

public List<Class> GetImplementedClasses(Interface Interface1) 
    { 
     . . . 
    } 

我試圖用interface1.AllChildren等諸多嘗試。他們中沒有人給出任何結果。

是否可以使用DXCore API編寫這樣的方法?

例:

enter image description here

如果我通過接口1,我應該從方法GetImplementedClasses得到的Class1和Class2中。

在此先感謝。

回答

4

Intrerface類中有一個「GetDescendants」方法,可能對您的任務有用。該代碼將類似於此:

public List<Class> GetImplementedClasses(Interface Interface1) 
{ 
    List<Class> result = new List<Class>(); 
    if (Interface1 != null) 
    { 
    ITypeElement[] descendants = Interface1.GetDescendants(); 
    foreach (ITypeElement descendant in descendants) 
    { 
     if (!descendant.InReferencedAssembly) 
     { 
     Class classDescendant = descendant.ToLanguageElement() as Class; 
     if (classDescendant != null) 
      result.Add(classDescendant); 
     } 
    } 
    } 
    return result; 
} 
+0

謝謝你的答案..但是這不工作... ITypeElement [] descendants = Interface1.GetDescendants();在這一行Interface1.GetDescendants()返回null .. – Sachin

+1

奇怪的是,我創建了一個測試插件,它顯示了接口的所有實現者,並且它按預期工作。你如何檢索一個接口的實例?您可以從此鏈接下載測試插件和測試代碼(根據您的示例):http://downloads.devexpress.com/Share/Temp/TestPlugIn/GetImplementedClasses.zip –

+0

這沒有奏效。我在CodeRushXpress-10.2.6和CodeRushXpress-11.1.4上試過這個。我也在[visual studio外的控制檯應用程序]中嘗試了這一點(http://www.skorkin.com/2011/06/how-to-use-dxcore-in-a-console-app-outside-of-visual-工作室/)和關於後代的手錶顯示爲空。 – Sachin

1

我不知道dxcore,但在普通的C#我已經寫an extension method它得到所有部署中可用的類型;你可以像這樣使用它:

Assembly.GetExecutingAssembly().GetAvailableTypes(
    typeFilter: t => 
     (t != typeof(interfaceType)) 
     && 
     typeof(interfaceType).IsAssignableFrom(t)); 
+0

謝謝你的答案..nice的博客... – Sachin

+0

我想寫一些簡單的插件到Visual Studio,所以用CodeRush API回答更接近這個問題.... :) – Sachin

+0

夠公平:-) –

相關問題