Génériques C#
Les génériques vous permettent de retarder l'écriture de la spécification du type de données d'un élément de programmation dans une classe ou une méthode jusqu'à ce qu'il soit réellement utilisé dans le programme. En d’autres termes, les génériques vous permettent d’écrire une classe ou une méthode pouvant fonctionner avec n’importe quel type de données.
Vous pouvez écrire la spécification d'une classe ou d'une méthode via des paramètres de substitution de types de données. Lorsque le compilateur rencontre un appel de fonction au constructeur ou à la méthode d'une classe, il génère du code pour gérer le type de données spécifié. L'exemple simple suivant vous aidera à comprendre ce concept :
using System; using System.Collections.Generic; namespace GenericApplication { public class MyGenericArray<T> { private T[] array; public MyGenericArray(int size) { array = new T[size + 1]; } public T getItem(int index) { return array[index]; } public void setItem(int index, T value) { array[index] = value; } } class Tester { static void Main(string[] args) { // 声明一个整型数组 MyGenericArray<int> intArray = new MyGenericArray<int>(5); // 设置值 for (int c = 0; c < 5; c++) { intArray.setItem(c, c*5); } // 获取值 for (int c = 0; c < 5; c++) { Console.Write(intArray.getItem(c) + " "); } Console.WriteLine(); // 声明一个字符数组 MyGenericArray<char> charArray = new MyGenericArray<char>(5); // 设置值 for (int c = 0; c < 5; c++) { charArray.setItem(c, (char)(c+97)); } // 获取值 for (int c = 0; c < 5; c++) { Console.Write(charArray.getItem(c) + " "); } Console.WriteLine(); Console.ReadKey(); } } }
Lorsque le code ci-dessus est compilé et exécuté, il produit les résultats suivants :
0 5 10 15 20 a b c d e
Caractéristiques génériques de (générique)
L'utilisation de génériques est une technologie qui améliore les fonctionnalités du programme, en particulier dans les aspects suivants :
Elle vous aide à maximiser la réutilisation du code et à protéger la sécurité des types et à améliorer les performances.
Vous pouvez créer des classes de collection génériques. La bibliothèque de classes .NET Framework inclut de nouvelles classes de collection génériques dans l'espace de noms System.Collections.Generic. Vous pouvez utiliser ces classes de collection génériques à la place des classes de collection dans System.Collections .
Vous pouvez créer vos propres interfaces génériques, classes génériques, méthodes génériques, événements génériques et délégués génériques.
Vous pouvez contraindre une classe générique à accéder aux méthodes d'un type de données spécifique.
Des informations sur les types utilisés dans les types de données génériques peuvent être obtenues au moment de l'exécution en utilisant la réflexion.
Méthode générique
Dans l'exemple ci-dessus, nous avons utilisé une classe générique, et nous pouvons déclarer une méthode générique via des paramètres de type. Le programme suivant illustre ce concept :
using System; using System.Collections.Generic; namespace GenericMethodAppl { class Program { static void Swap<T>(ref T lhs, ref T rhs) { T temp; temp = lhs; lhs = rhs; rhs = temp; } static void Main(string[] args) { int a, b; char c, d; a = 10; b = 20; c = 'I'; d = 'V'; // 在交换之前显示值 Console.WriteLine("Int values before calling swap:"); Console.WriteLine("a = {0}, b = {1}", a, b); Console.WriteLine("Char values before calling swap:"); Console.WriteLine("c = {0}, d = {1}", c, d); // 调用 swap Swap<int>(ref a, ref b); Swap<char>(ref c, ref d); // 在交换之后显示值 Console.WriteLine("Int values after calling swap:"); Console.WriteLine("a = {0}, b = {1}", a, b); Console.WriteLine("Char values after calling swap:"); Console.WriteLine("c = {0}, d = {1}", c, d); Console.ReadKey(); } } }
Lorsque le code ci-dessus est compilé et exécuté, il produit les résultats suivants :
Int values before calling swap: a = 10, b = 20 Char values before calling swap: c = I, d = V Int values after calling swap: a = 20, b = 10 Char values after calling swap: c = V, d = I
Délégué générique
Vous pouvez définir des délégués génériques via des paramètres de type. Par exemple :
delegate T NumberChanger<T>(T n);
L'exemple suivant montre l'utilisation de délégués :
using System; using System.Collections.Generic; delegate T NumberChanger<T>(T n); namespace GenericDelegateAppl { class TestDelegate { static int num = 10; public static int AddNum(int p) { num += p; return num; } public static int MultNum(int q) { num *= q; return num; } public static int getNum() { return num; } static void Main(string[] args) { // 创建委托实例 NumberChangernc1 = new NumberChanger (AddNum); NumberChanger nc2 = new NumberChanger (MultNum); // 使用委托对象调用方法 nc1(25); Console.WriteLine("Value of Num: {0}", getNum()); nc2(5); Console.WriteLine("Value of Num: {0}", getNum()); Console.ReadKey(); } } }
Lorsque le code ci-dessus est compilé et exécuté, il produit les résultats suivants :
Value of Num: 35 Value of Num: 175
Ce qui précède est le contenu du [Tutoriel c#] C# Generic Pour plus de contenu connexe, veuillez faire attention au site Web PHP chinois (www.php.cn) !