如何通过C#中的反射获取接口(interface)的所有实现?

最佳答案

答案是这样;它会搜索整个应用程序域-即您的应用程序当前加载的每个程序集。

/// <summary>
/// Returns all types in the current AppDomain implementing the interface or inheriting the type.
/// </summary>
public static IEnumerable<Type> TypesImplementingInterface(Type desiredType)
{
    return AppDomain
           .CurrentDomain
           .GetAssemblies()
           .SelectMany(assembly => assembly.GetTypes())
           .Where(type => desiredType.IsAssignableFrom(type));
}

它是这样使用的;
var disposableTypes =  TypesImplementingInterface(typeof(IDisposable));

您可能还希望此函数查找实际的具体类型-即过滤掉抽象,接口(interface)和通用类型定义。
public static bool IsRealClass(Type testType)
{
    return testType.IsAbstract == false
         && testType.IsGenericTypeDefinition == false
         && testType.IsInterface == false;
}

10-06 09:08