Ceci est une extension de this question et probablement pourrait même être une copie d'une autre question (Si oui, s'il vous plaît pardonnez-moi). Je see from MSDN que les génériques sont généralement utilisés avec des collectionsGénériques vs héritage (quand aucune classe de collection n'est impliquée)
L'utilisation la plus courante pour génériques des classes est avec des collections comme listes chaînées, tables de hachage, des piles, files d'attente, des arbres et ainsi de suite où opérations telles que l'ajout et enlever articles de la collection sont effectué de la même manière indépendamment du type de données étant stocké.
Les exemples que j'ai vus valident également l'énoncé ci-dessus.
Est-ce que quelqu'un peut donner une utilisation valide des génériques dans un scénario réel qui n'implique aucune collection?
pédante, je pensais à faire un exemple qui ne concerne pas les collections
public class Animal<T>
{
public void Speak()
{
Console.WriteLine("I am an Animal and my type is " + typeof(T).ToString());
}
public void Eat()
{
//Eat food
}
}
public class Dog
{
public void WhoAmI()
{
Console.WriteLine(this.GetType().ToString());
}
}
et "Un animal de type chien" sera
Animal<Dog> magic = new Animal<Dog>();
Il est tout à fait possible pour avoir Dog
hérité de Animal
(En supposant une version non générique de Animal
) Dog:Animal
Par conséquent Dog
est unAnimal
Un autre exemple que je pensais était un BankAccount
. Il peut être BankAccount<Checking>
, BankAccount<Savings>
. Cela peut très bien être Checking:BankAccount
et Savings:BankAccount
.
Y a-t-il des meilleures pratiques pour déterminer si nous devrions aller avec des génériques ou avec l'héritage?
Utilisez héritage chaque fois que vous avez besoin d'étendre une classe. Dans votre exemple, Animal est un générique, c'est-à-dire qu'il peut être n'importe quel type que vous lui attribuez. Les génériques permettent à votre programme d'utiliser une interface commune pour effectuer des opérations. – Kaili