2010-09-13 9 views
6

Novato en C# hay muchas interfaces de marco como IDisposable, IQueryable, IEnumerable disponibles que tienen diferentes usos ¿Hay una lista disponible para este tipo de interfaces de sistema que se puede utilizar como referencia listosLista de interfaces de marco en C#

Respuesta

7

BIEN, a continuación es una secuencia de comandos rápida corrí a escanear ensamblados .NET de mi computadora y encontrar todos los tipos de interfaces definidas dentro de ellos

El archivo de salida se 1657 líneas de largo *, así que ... es posible que desee reducir un poco la búsqueda;)

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

* Y para ser sincero, ni siquiera sé qué tan completo fue este enfoque.

5

Bueno, muchos son muy a medida para fines específicos. Si enumeró todo de ellos tomaría un tiempo.

los principales que me gustaría añadir a lo anterior son IList/IList<T> (sistemas/colecciones/listas), IDictionary<TKey,TValue>, IEnumerable<T> (versión genérica de IEnumerable), y IEnumerator (además de doble genérica, aunque en realidad pocas personas necesitan código contra IEnumerator).

Si usted desea en cualquier área, no habría muchos más que va a coincidir con rapidez - cosas como IDbCommand/IDataReader para datos de acceso, etc - pero no es sólo las interfaces que son importantes. Cosas como Stream es una clase (aunque abstracta), pero enormemente importante.

Creo que una mejor pregunta/táctica podría ser "dado que estoy haciendo [X específica], ¿cuáles son los tipos importantes que debe conocer?". Como no conocemos la [X específica], no podemos responder tanto.

+0

+1: respuesta mucho más práctico que la mía. –

+0

Un buen consejo, pero creo que hay algo que decir acerca de poder explorar un poco y ver lo que el marco tiene en la tienda. Nunca se sabe cuándo va a necesitar un seguimiento de cambios reversibles personalizado, por ejemplo. (http://msdn.microsoft.com/en-us/library/system.componentmodel.irevertiblechangetracking.aspx) –

4

Aquí es una documentación de la biblioteca de clases .NET Framework

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

Al hacer clic en el espacio de nombres seleccionado verá interfaces definidas en ese espacio de nombres. En mi humilde opinión, esta lista clasificada es mucho más cómoda de usar como referencia que una simple lista de interfaces.

0

Aquí es un poco de LINQ para obtener un conjunto de interfaces, donde "archivos" es un conjunto de bibliotecas para buscar .....

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); 
Cuestiones relacionadas