Domanda

Ad esempio, se volessi vedere quali erano le mie opzioni .NET per qualcosa che implementa IList o IDictionary.C'è un modo per trovarlo, ad esempio, nella documentazione MSDN?

È stato utile?

Soluzione

Per trovarlo in MSDN, di solito vado a Google, tipo qualcosa come "MSDN IList", e per arrivare a IList Interface che ha una sezione "Classi che implementano IList". Questo è vero per una qualsiasi delle classi di interfaccia.

Se si trova una classe di base come DictionaryBase , ci sarà un link chiamato classi derivate , che vi porterà a un albero che mostra il gerarchia di ereditarietà .

Altri suggerimenti

Credo che sia possibile utilizzando riflettore

Puoi anche farlo a livello di codice.

Se conosci l'assembly in cui si trovano i tipi (sto usando mscorlib poiché è lì che string si trova) puoi creare un elenco utilizzando questo metodo:

.Rete 3.0

List<Type> implementors = 
   Assembly.GetAssembly(typeof(string))
    .GetTypes()
    .Where(type => type.GetInterfaces().Contains(typeof(IList)))
    .ToList();

.Rete 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);
        }
    }
}

IL implementors list conterrà un elenco di Types che implementano l'interfaccia IList.Si può cambiare IList a qualsiasi interfaccia desideri, IDictionary, ICollection, eccetera.

Modificare:

Se vuoi estenderlo a tutti gli assembly nel file current AppDomain, potresti fare:

List<Type> implementors = 
AppDomain.CurrentDomain.GetAssemblies()
.SelectMany(assembly => assembly.GetTypes()
                        .Where(type => type.GetInterfaces().Contains(typeof(IList)))
            ).ToList();

Dipende davvero tutto da cosa stai facendo con i dati.Se desideri visualizzarli solo per la tua soddisfazione personale, Riflettore sarà l'opzione più semplice, soprattutto se vuoi guardare oltre gli assembly caricati nel dominio dell'applicazione (supponendo che tu abbia un'applicazione con cui cominciare).Suppongo che in questo caso potresti caricare tutti gli assembly dal GAC ...ma questo è fondamentalmente ciò che Riflettore fa tranne che puoi scegliere quali desideri individualmente.

Si può cercare le interfacce di un certo tipo implementa con questo metodo:

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

dovrebbe fare il trucco

Hai un caso d'uso specifico? Fuori della parte superiore della mia testa si può usare:

System.Collections.ArrayList (or derived)
System.Collections.ObjectModel.Collection<T> derived
System.Collections.CollectionBase derived
System.Collections.DictionaryBase derived
System.Collections.Hashtable (or derived)
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top