2011-06-30 43 views
3

私はInterfaceを実装するクラスのリストを返すメソッドを記述しようとしましたが、できませんでした。CodeRushでインターフェイスを実装するクラスを取得するには?

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

のようないくつかの方法私はinterface1.AllChildrenや他の多くの試行を使用しようとしました。彼らのうちの何人かは結果を与えなかった。

DXCore APIを使用してこのようなメソッドを記述することはできますか?

例:

enter image description here

私はインターフェース1を渡すと、私は方法のGetImplementedClassesからクラス1とクラス2を取得する必要があります。

ありがとうございました。

答えて

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 [] descendant = 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-スタジオ/)と子孫の時計はnullを示した。 – Sachin

1

私はdxcoreわからないんだけど、通常のC#で、私は、展開で使用可能なすべての種類を取得しますan extension methodを書きました。

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

答えをいただきありがとうございました。ちなみに... – Sachin

+0

私はVisual Studioにいくつかの簡単なプラグインを書こうとしていますので、CodeRush APIを使ってこの質問に近い答えを得ています。:) – Sachin

+0

フェア十分な:-) –

関連する問題