Nota: Questo è simile, ma non proprio la stessa di this other questionICollection vs ICollection <T> - ambiguità tra ICollection <T> Count e ICollection.Count
Ho implementato un'interfaccia IBusinessCollection
. È dervies sia da ICollection<T>
sia da quello non generico vecchio-ICollection
. Preferirei fare uscire solo il vecchio sballato ICollection
, ma sto usando WPF databinding con una CollectionView che mi vuole implementare il vecchio-sballato non generico IList
:-(
In ogni caso, le interfacce di simile a questa:
public interface IBusinessCollection<T> : ICollection<T>, ICollection
{ }
public interface ICollection<T>
{ int Count { get; } }
public interface ICollection
{ int Count { get; } }
causa usando Dependency Injection, sto passando intorno agli oggetti di tipo IBusinessCollection<T>
usando le loro interfacce, non da tipi concreti, in modo da avere qualcosa di simile:
internal class AnonymousCollection : IBusinessCollection<string>
{
public int Count { get { return 5; } }
}
public class Factory
{
public static IBusinessCollection<string> Get()
{ return new AnonymousCollection(); }
}
Quando provo e chiamo questo codice, si ottiene un errore, come segue:
var counter = Factory.Get();
counter.Count; // Won't compile
// Ambiguity between 'ICollection<string>.Count' and 'ICollection.Count'
Ci sono 3 modi per rendere questo compilazione, ma tutti sono brutti.
Fusioni la classe alla sua realizzazione concreta (che io non so)
Fusioni classe esplicitamente
ICollection
Fusioni classe esplicitamente
ICollection<T>
C'è una quarta opzione che non richiede che io scriva qualcosa? Posso fare tutte le modifiche che ho bisogno di IBusinessCollection<T>
Perché non implementare entrambe le interfacce in modo esplicito e quelle comuni direttamente? Rende comunque possibile "programmare contro un'interfaccia, non contro un'implementazione" dall'esterno. –