如何在CodeRush中获取实现接口的类?

时间:2011-06-30 19:15:30

标签: coderush dxcore

我试图编写一个返回实现接口的类列表的方法,但是无法做到。

某种方法,如

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

我尝试使用interface1.AllChildren和许多其他尝试。他们没有给出任何结果。

是否可以使用DXCore API编写这样的方法?

实施例

enter image description here

如果我通过Interface1,我应该从方法GetImplementedClasses获得Class1和Class2。

先谢谢。

2 个答案:

答案 0 :(得分:4)

Interface类中有一个可能对您的任务有用的“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;
}

答案 1 :(得分:1)

我不确定dxcore,但是在常规C#中,我编写了an extension method,它可以获得部署中可用的所有类型;你可以像这样使用它:

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