Les génériques vous permettent de différer l'écriture de la spécification du type de données d'un élément de programmation au sein d'une classe ou d'une méthode jusqu'à ce qu'il soit réellement utilisé dans votre programme. En d'autres termes, lors de la déclaration d'une classe ou d'une méthode, parce que nous ne savons pas quel type de paramètres l'utilisateur souhaite transmettre, nous « creusons un trou (« <T> ») » où le type est transmis. utilisez-le, nous le remplissons avec des types de données spécifiques.
Classe générique :
Sur la base des connaissances que nous avons apprises précédemment, nous définissons une classe :
class Data { public int n_data; }
A ce moment, le type de données de n_data a été déterminé comme étant de type int, donc lors de l'attribution d'une valeur, elle ne peut être que de type int si elle est réécrite comme la classe générique suivante :
class Data<T> { public T n_data; }
. Pour le moment, le type de données de n_data n'est pas encore sûr, donc lorsque vous lui attribuez une valeur, vous devez spécifier T, qui est le type de n_data, qui doit combler les lacunes,
<🎜. >Data<int> data = new Data<int>(); //指定T为int Data<string> data = new Data<string>(); //指定T为string
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Example { class Data<T> //泛型类 { public T[] n_data; //泛型变量 public Data(int size) //构造方法,new的时候调用构造方法开辟空间 { n_data = new T[size]; } //输入 public void setdata(int index,T value) { n_data[index] = value; } //输出 public T getdata(int x) { return n_data[x]; } } class Program { static void Main(string[] args) { Data<int> data = new Data<int>(5); data.n_data[2] = 2; Console.WriteLine(data.n_data[2]); } } }
#include <iostream> using namespace std; template <typename T> void swap1(T &a,T &b) //也可以看作泛型 { T temp; temp = a; a = b; b = temp; } int main() { int a=0,b=1; swap1(a,b); cout<<a<<"\t"<<b<<endl; return 0; }
Si a et b sont des types de caractères, les fonctions ci-dessus sont également applicables. CLa méthode #swap est la suivante :
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Example { class data {//swap方法,ref是按地址传递 public static void swap<T>(ref T a, ref T b) { T temp; temp = a; a = b; b = temp; } static void Main(string[] args) { string a = "HC"; string b = "666"; swap(ref a,ref b); Console.WriteLine(a+"\t"+b); //结果 666 HC } } }
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Example { public delegate void MyDelegate<T>();//泛型委托 class Data<T> { private T a; private T b; public void setvalue(T x, T y) { a = x; b = y; } //swap方法,ref是按地址传递 public void swap() { T temp; temp = a; a = b; b = temp; } public void printvalue() { Console.WriteLine(a + "\t" + b); } } class program { static void Main(string[] args) { Data<string> data = new Data<string>(); data.setvalue("HC","666"); MyDelegate<string> my = new MyDelegate<string>(data.swap); my += data.printvalue; my(); //结果 666 HC } } }
Résultat :