Список интерфейсов Framework в c # - PullRequest
7 голосов
/ 13 сентября 2010

Новичок в c #, есть много интерфейсов фреймворков, таких как iDisposable, Iqueryable, IEnumerable, которые могут иметь различное использование. Доступен ли список для таких системных интерфейсов, который можно использовать как справочный материал

Ответы [ 4 ]

7 голосов
/ 13 сентября 2010

WELL , ниже приведен быстрый скрипт, который я запустил для сканирования сборок .NET моего компьютера и поиска всех типов интерфейсов, определенных в них.*, так что ... возможно, вы захотите немного сузить область поиска;)

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();

* И, честно говоря, я даже не знаю, насколько всеобъемлющим был этот подход.

5 голосов
/ 13 сентября 2010

Ну, многие очень нацелены на конкретные цели. Если бы вы перечислили всех из них, это заняло бы некоторое время.

Основными, которые я бы добавил к вышесказанному, являются IList / IList<T> (наборы / коллекции / списки), IDictionary<TKey,TValue>, IEnumerable<T> (общая версия IEnumerable) и IEnumerator ( плюс общий близнец, хотя на самом деле мало кто должен кодировать против IEnumerator).

Если вы захотите войти в какую-либо область, вы встретитесь со множеством других вещей - например, IDbCommand / IDataReader для доступа к данным и т. Д. - но это не просто интерфейсы что важно. Такие вещи, как Stream - это класс (пусть и абстрактный), но чрезвычайно важный.

Я думаю, что лучшим вопросом / тактикой может быть «учитывая, что я делаю [конкретный Х], о каких важных типах нужно знать?». Поскольку мы не знаем [конкретный X], мы не можем ответить так много.

4 голосов
/ 13 сентября 2010

Вот документация библиотеки классов .NET Framework

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

Нажав на выбранное пространство имен, вы увидите интерфейсы, определенные в этом пространстве имен.По моему скромному мнению, такой категоризированный список гораздо удобнее использовать в качестве справочного материала, чем просто список интерфейсов.

0 голосов
/ 13 сентября 2010

Вот несколько 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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...