Les génériques ont été ajoutés dans la version 2.0 de C# et sont l'un des concepts les plus importants du langage. Ils vous permettent d'écrire du code réutilisable et hautes performances, de type sécurisé au moment de la compilation. Les génériques vous permettent d'utiliser un type dans votre code sans connaître le type au préalable.
Les génériques sont utilisés à de nombreux endroits dans .NET, notamment les collections, les délégués et le code asynchrone. Avec les génériques, vous n'avez pas besoin de connaître la taille de la collection à l'avance et vous pouvez utiliser des génériques avec n'importe quel type d'élément, même avec des types de données personnalisés spécifiques à votre code. C# prend en charge les types génériques (classes, interfaces, etc.) et les méthodes génériques.
Dans les génériques, vous avez des paramètres de type et des paramètres de type. Ceci est similaire à une méthode comportant des paramètres que vous pouvez transmettre à la méthode.
La syntaxe de déclaration d'un type générique se compose de paramètres de type entourés de crochets angulaires. Le nom du type. Par exemple, Locator
public class Locator<T> { }
Pour créer une instance de Locator
var stringLocator = new Locator<string>();
Vous pouvez utiliser des paramètres de type (T) sur les méthodes de classe, comme indiqué dans l'exemple ci-dessous.
public class Locator{ public IList Items { get; set; } public T Locate(int index){ return Items[index]; } } var stringLocator = new Locator<string>(); string item = stringLocator.Locate(2);
Un autre avantage des génériques est l'IntelliSense fourni par l'éditeur. Lorsque vous tapez stringLocator.Locate(4) dans Visual Studio ou VS Code et que vous survolez le nom de la méthode, cela indique qu'elle renvoie une chaîne au lieu d'un T. Le compilateur générera une erreur si vous essayez d'attribuer le résultat à un type autre qu'une chaîne. Par exemple, lorsque
// Error: Cannot implicitly convert type 'string' to 'int' [c-sharp]csharp(CS0029) int item = stringLocator.Locate(2);
hérite d'un type de base générique ou d'une interface générique, le type générique peut utiliser des paramètres de type comme arguments de type. Le type générique LinkedList
public class LinkedList<T> : IEnumerable<T>
Une méthode générique est simplement une méthode qui déclare un paramètre de type que vous pouvez utiliser dans une méthode et l'utiliser comme paramètre et type de retour. Dans l'exemple suivant, Swap
public class Swapper{ public T Swap<T>(T first, T second){ T temp = first; first = second; second = temp; return temp; } }
Comme les types génériques, lorsque vous appelez une méthode générique, elle renverra une variable fortement typée.
var swapper = new Swapper(); int result = swapper.Swap<int>(5, 3);
peut avoir plusieurs paramètres généraux. La classe Dictionary dans l'espace de noms System.Collections.Generic a deux paramètres de type, key et value.
public class Dictionary<TKey, TValue>
Enfin, il est important de comprendre ce qui est universel. Pour les types, tout peut être générique sauf les énumérations. Ceux-ci incluent -
Pour les membres de type, seules les méthodes et les types imbriqués peuvent être génériques. Les membres suivants ne peuvent pas être génériques -
Live Demo
using System; using System.Collections.Generic; class Program{ static void Main(){ var stringLocator = new Locator<string>(){ Items = new string[] { "JavaScript", "CSharp", "Golang" } }; string item = stringLocator.Locate(1); Console.WriteLine(item); // CSharp var swapper = new Swapper(); int a = 5, b = 3; int result = swapper.Swap<int>(ref a, ref b); Console.WriteLine($"a = {a}, b = {b}"); } } public class Locator<T>{ public IList<T> Items { get; set; } public T Locate(int index){ return Items[index]; } } public class Swapper{ public T Swap<T>(ref T first, ref T second){ T temp = first; first = second; second = temp; return temp; } }
CSharp a = 3, b = 5
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!