domanda aggiornato dato risposta corretta di Andrew Hare:Come faccio a enumerare un elenco di interfacce che sono direttamente definite su una classe ereditaria?
Date le seguenti classi C#:
public class Bar : Foo, IDisposable
{
// implementation of Bar and IDisposable
}
public class Foo : IEnumerable<int>
{
// implementation of Foo and all its inherited interfaces
}
voglio un metodo come la seguente che non manca sulle affermazioni (Nota: non è possibile cambiare le affermazioni):
public void SomeMethod()
{
// This doesn't work
Type[] interfaces = typeof(Bar).GetInterfaces();
Debug.Assert(interfaces != null);
Debug.Assert(interfaces.Length == 1);
Debug.Assert(interfaces[0] == typeof(IDisposable));
}
Can
qualcuno aiuto mediante la fissazione di questo metodo in modo che le asserzioni non fallire?
Calling typeof(Bar).GetInterfaces()
non funziona perché restituisce l'intera gerarchia di interfaccia (cioè interfaces
variabile contiene IEnumerable<int>
, IEnumerable
, e IDisposable
), non solo il livello superiore.
Perché mai dovresti farlo? Non sarebbe molto meglio e più pulito affermare semplicemente che gli attrezzi Bar sono IDisposable? – Svish
@Svish - Questo è un esempio forzato. Sto lavorando a una struttura di auto-binding IoC personalizzata che ha bisogno di cercare la maggior parte delle interfacce. Ho pensato di semplificare lo scenario per rispondere alla domanda di root che cercavo, e non confondere il rumore IoC. Inoltre, ora quando qualcun altro ha bisogno di una risposta a questa domanda in un contesto diverso, il rumore IoC non si intrometterà. – Jordan