Maison > développement back-end > Tutoriel C#.Net > Expliquer comment fonctionnent les génériques en C#

Expliquer comment fonctionnent les génériques en C#

WBOY
Libérer: 2023-08-27 23:45:02
avant
1060 Les gens l'ont consulté

解释泛型在 C# 中的工作原理

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.

Types génériques

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 est la classe générique dans l'exemple ci-dessous.

public class Locator<T>
{

}
Copier après la connexion

Pour créer une instance de Locator, utilisez le nouveau mot-clé suivi du nom de la classe. Cependant, vous pouvez spécifier le type réel à passer en paramètre au lieu de T. L'exemple suivant transmet un type de chaîne en tant que paramètre.

var stringLocator = new Locator<string>();
Copier après la connexion

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);
Copier après la connexion

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 &#39;string&#39; to &#39;int&#39; [c-sharp]csharp(CS0029)
int item = stringLocator.Locate(2);
Copier après la connexion

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 implémente l'interface générique IEnumerable ainsi que d'autres interfaces.

public class LinkedList<T> : IEnumerable<T>
Copier après la connexion

Méthodes génériques

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 est une méthode générique qui prend deux paramètres de type T et renvoie une instance de T .

public class Swapper{
   public T Swap<T>(T first, T second){
      T temp = first;
      first = second;
      second = temp;
      return temp;
   }
}
Copier après la connexion

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);
Copier après la connexion

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>
Copier après la connexion

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 -

  • Classes
  • Structures
  • Interfaces
  • Délégués

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 -

  • Fields
  • Properties
  • Indexer
  • Constructor
  • Events
  • Terminator

Example

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;
   }
}
Copier après la connexion

Output

CSharp
a = 3, b = 5
Copier après la connexion

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!

source:tutorialspoint.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal