Вы также можете сделать это программно.
Если вам известна сборка, в которой расположены типы (я использую mscorlib
, поскольку именно там находится string
), вы можете создать список, используя этот метод:
.Net 3.0
List<Type> implementors =
Assembly.GetAssembly(typeof(string))
.GetTypes()
.Where(type => type.GetInterfaces().Contains(typeof(IList)))
.ToList();
.Net 2.0
List<Type> implementors = new List<Type>();
foreach (Type type in Assembly.GetAssembly(typeof(string)).GetTypes())
{
foreach (Type interfaceType in type.GetInterfaces())
{
if (interfaceType == typeof(IList))
{
implementors.Add(type);
}
}
}
Список implementors
будет содержать список Types
, который реализует интерфейс IList
. Вы можете изменить IList
на любой интерфейс, который вам нужен, IDictionary
, ICollection
и т. Д.
Edit:
Если вы хотите распространить это на все сборки в текущем AppDomain
, вы можете сделать:
List<Type> implementors =
AppDomain.CurrentDomain.GetAssemblies()
.SelectMany(assembly => assembly.GetTypes()
.Where(type => type.GetInterfaces().Contains(typeof(IList)))
).ToList();
Все зависит от того, что вы делаете с данными. Если вы просто хотите просмотреть их для своего личного удовольствия, Reflector будет вашим самым простым вариантом, особенно если вы хотите посмотреть за пределы сборок, загруженных в домен приложения (при условии, что у вас есть приложение для начала ). Я полагаю, что в этом случае вы могли бы загрузить все сборки из GAC ... но это в основном то, что делает Reflector , за исключением того, что вы можете выбирать, какие из них вы хотите индивидуально.