Nota: Esto es similar, pero no exactamente lo mismo que this other questionICollection vs ICollection <T> - La ambigüedad entre ICollection <T> .Count y ICollection.Count
he implementado una interfaz IBusinessCollection
. Deriva de ambos ICollection<T>
, y el viejo no buscó genérico ICollection
. Yo prefiero volcar simplemente el viejo reventado ICollection
, pero estoy usando WPF enlace de datos con un CollectionView el que quiere que implementan la edad de busto no genérico IList
:-(
De todos modos, las interfaces se ven así:
public interface IBusinessCollection<T> : ICollection<T>, ICollection
{ }
public interface ICollection<T>
{ int Count { get; } }
public interface ICollection
{ int Count { get; } }
Debido a la utilización de la inyección de dependencias, que estoy pasando alrededor de los objetos de tipo IBusinessCollection<T>
usando sus interfaces, no por tipos de hormigón, así que tener algo como esto:
internal class AnonymousCollection : IBusinessCollection<string>
{
public int Count { get { return 5; } }
}
public class Factory
{
public static IBusinessCollection<string> Get()
{ return new AnonymousCollection(); }
}
Cuando intento llamar a este código, me sale un error, de la siguiente manera:
var counter = Factory.Get();
counter.Count; // Won't compile
// Ambiguity between 'ICollection<string>.Count' and 'ICollection.Count'
Hay 3 maneras de hacer esta compilación, pero todos ellos son feos.
Reparto de la clase a la que es puesta en práctica concreta (que yo no lo sepa)
Reparto de la clase explícitamente a
ICollection
Reparto de la clase explícitamente a
ICollection<T>
¿Hay una cuarta opción que no me obligue a lanzar cosas? Puedo hacer los cambios que necesito IBusinessCollection<T>
¿Por qué no implementar ambas interfaces explícitamente, y las comunes directamente? Todavía hace posible "programar contra una interfaz, no contra una implementación" desde el exterior. –