Voici un exemple simple d'un problème courant :
ICollection<int> myIntegers = ....
ICollection<string> myStrings = ....
A un moment donné, je passe des instances de ces et d'autres types à des méthodes qui les reçoivent typées IEnumerable. (la forme non-générique).
Sans pirater la porte arrière par réflexion, ce code ne peut pas déterminer :
1. That the instance is a constructed type of ICollection<T>
2. The number of elements in the ICollection<T>-based type.
Sans savoir quel est l'argument générique.
Lorsque je définis un type générique qui fournit des opérations qui n'ont aucune dépendance avec le type d'argument générique (par exemple, comme la propriété Count de ICollection), je Je définis généralement un type de base non générique et c'est où je place les opérations non dépendantes du type, comme suit :
public abstract class FrugalList
{
public abstract int Count {get;}
}
public class FrugalList<T> : FrugalList
{
public override int Count {get{...}}
void Add(T item) {...}
}
Compte tenu de cela, je peux utiliser le type de base abstrait pour obtenir le compte d'une instance de n'importe quel type construit sur la définition du type générique, facilement.
Donc, la question est tout simplement, pensez-vous que qu'il est important de fournir cette fonctionnalité (qui peut également être réalisée via des interfaces) ?