Получить список классов, реализующих данный интерфейс - C#
Формулировка задачи:
Возможно ли получить список классов, реализующих определенный интерфейс? Или хотя бы унаследованных от данного класса? И каким образом это сделать?
Решение задачи: «Получить список классов, реализующих данный интерфейс»
textual
Листинг программы
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Test
{
class Program
{
private static System.Diagnostics.Process gac;
private static System.IO.StreamReader streamReader;
private static System.Reflection.Assembly assembly;
private static Type[] types;
private static string nameInterface="System.Reflection.IReflect";
static void Main(string[] args)
{
gac = new System.Diagnostics.Process();
gac.StartInfo.FileName = @"c:\Program Files\Microsoft SDKs\Windows\v6.0A\bin\gacutil.exe";
gac.StartInfo.RedirectStandardOutput = true;
gac.StartInfo.UseShellExecute = false;
gac.StartInfo.Arguments = "/l";
gac.Start();
streamReader = gac.StandardOutput;
while (!streamReader.EndOfStream)
{
assembly = GetNextAssembly();
if (assembly != null)
{
GetTypesOfAssembly();
foreach (Type type in types)
{
if (type != null)
{
foreach (Type inter in type.GetInterfaces())
{
if (inter.FullName == nameInterface)
{
System.Console.Out.WriteLine(type.FullName);
}
}
}
}
}
}
}
static System.Reflection.Assembly GetNextAssembly()
{
System.Reflection.Assembly assembly;
try
{
assembly = System.Reflection.Assembly.Load(streamReader.ReadLine());
}
catch
{
assembly = null;
}
return assembly;
}
static void GetTypesOfAssembly()
{
try
{
types = assembly.GetTypes();
}
catch (System.Reflection.ReflectionTypeLoadException refl)
{
types = refl.Types;
}
}
}
}