c#中的框架接口列表

时间:2010-09-13 10:46:25

标签: c# interface

c#中的新手 有许多框架接口,如iDisposable,Iqueryable,IEnumerable等,它们有不同的用途 是否有可用于此类系统接口的列表,可用作现成参考

4 个答案:

答案 0 :(得分:7)

WELL ,下面是我运行的快速脚本,用于扫描计算机的.NET程序集并查找其中定义的所有接口类型

输出文件 1657行 *,所以...您可能希望稍微缩小搜索范围;)

Console.Write("Enter a path to write the list of interfaces to: ");
string savePath = Console.ReadLine();

var errors = new List<string>();
using (var writer = new StreamWriter(savePath))
{
    string dotNetPath = @"C:\Windows\Microsoft.NET\Framework";
    string[] dllFiles = Directory.GetFiles(dotNetPath, "*.dll", SearchOption.AllDirectories);

    foreach (string dllFilePath in dllFiles)
    {
        try
        {
            Assembly assembly = Assembly.LoadFile(dllFilePath);
            var interfaceTypes = assembly.GetTypes()
                .Where(t => t.IsInterface);
            foreach (Type interfaceType in interfaceTypes)
            {
                writer.WriteLine(interfaceType.FullName);
                Console.WriteLine(interfaceType.FullName);
            }
        }
        catch
        {
            errors.Add(string.Format("Unable to load assembly '{0}'.", dllFilePath));
        }
    }
}

foreach (string err in errors)
{
    Console.WriteLine(err);
}

Console.ReadLine();

*说实话,我甚至不知道这种方法有多全面。

答案 1 :(得分:5)

嗯,很多人都非常擅长特定目的。如果您列出所有,则需要一段时间。

我在上面添加的主要内容包括IList / IList<T>(集合/集合/列表),IDictionary<TKey,TValue>IEnumerable<T>({{1}的通用版本1}})和IEnumerable(加上通用双胞胎,虽然实际上很少有人需要对IEnumerator进行编码)。

如果你想进入任何领域,你会很快就会遇到更多的东西 - 例如IEnumerator / IDbCommand用于数据访问等等 - 但它不仅仅是< em>接口很重要。 IDataReader之类的东西是一个类(尽管是抽象的),但非常重要。

我认为一个更好的问题/策略可能是“考虑到我正在做[特定X],有哪些重要类型需要了解?”。由于我们不知道[具体的X],我们无法回答那么多。

答案 2 :(得分:4)

这是.NET Framework类库文档

http://msdn.microsoft.com/en-us/library/ms229335.aspx

通过单击选定的命名空间,您将看到该命名空间中定义的接口。 在我的拙见中,这样的分类列表比仅仅简单的接口列表更适合作为参考。

答案 3 :(得分:0)

这里有一些LINQ来获取接口集合,其中“files”是一个要搜索的库数组.....

   var interfaces = (from fileName in files
                     select Assembly.LoadFile(fileName)
                     into assembly
                     select assembly.GetTypes()
                     into typesInAssembly
                     from interfacesInType in typesInAssembly.Select(type => type.GetInterfaces())
                     from interfaceInType in interfacesInType
                     select interfaceInType)
                     .Distinct()
                     .OrderBy( i => i.Name);