有没有办法找到.NET类实现某个接口?

时间:2009-07-15 21:34:36

标签: .net inheritance interface class-hierarchy

例如,如果我想看看我的.NET选项是用于实现IList或IDictionary的东西。有没有办法在MSDN文档中找到它?

5 个答案:

答案 0 :(得分:5)

我认为可以使用Reflector

答案 1 :(得分:3)

要在MSDN中找到它,我通常会去Google,输入类似“MSDN IList”的内容,然后转到IList Interface,其中有“实施IList的类”部分。对于任何接口类都是如此。

如果您找到DictionaryBase等基类,则会有一个名为派生类的链接,它会将您带到显示inheritance hierarchy的树。

答案 2 :(得分:3)

您也可以通过编程方式执行此操作。

如果您知道类型所在的程序集(我使用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的{​​{1}}列表。您可以将IList更改为您想要的任何界面,IListIDictionary等。

编辑:

如果要将其扩展到当前ICollection中的所有程序集,您可以执行以下操作:

AppDomain

这完全取决于您对数据的处理方式。如果您只是想以个人满意度查看它们,Reflector将是您最简单的选择 - 特别是如果您想要查看应用程序域中加载的程序集(假设您有一个应用程序开头)。在这种情况下,我想你可以从GAC加载所有程序集......但这基本上是Reflector所做的,除了你可以选择你想要的那些。

答案 3 :(得分:1)

您可以使用此方法查找某个类型实现的接口:

http://msdn.microsoft.com/en-us/library/system.type.getinterfaces.aspx

应该做的伎俩

答案 4 :(得分:0)

您是否有特定用例?我可以使用:

System.Collections.ArrayList (or derived)
System.Collections.ObjectModel.Collection<T> derived
System.Collections.CollectionBase derived
System.Collections.DictionaryBase derived
System.Collections.Hashtable (or derived)