C# Learning Diary 30 --- Classes génériques, méthodes génériques, délégués génériques

黄舟
Libérer: 2017-01-21 15:46:35
original
1331 Les gens l'ont consulté

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

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

. 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
Copier après la connexion
Bien sûr, dans l'exemple ci-dessus, T ne peut pas être spécifié. Si vous souhaitez que le type de n_data soit un tableau, l'exemple suivant peut être satisfait :

.
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]);  
        }  
    }  
}
Copier après la connexion
Le résultat est : 2

Méthode générique :

C'est ce que nous prenons comme exemple la méthode d'échange swap, la fonction swap en C s'écrit comme ceci :

#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;  
}
Copier après la connexion
Résultat : 1 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  
        }  
    }  
}
Copier après la connexion
Résultat : 666 HC Ceci est très similaire à C++

Délégué générique :

Délégué là sont également des génériques, en suivant l'exemple ci-dessus :

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

Résultat :

C# Learning Diary 30 --- Classes génériques, méthodes génériques, délégués génériques

C'est une question de génériques, quoi d'autre Bienvenue pour le signaler ? toute erreur ^_^

Ce qui précède est le contenu du C# Learning Diary 30 --- classes génériques, méthodes génériques et délégués génériques Pour plus de contenu connexe, veuillez prêter attention au site Web PHP chinois (www. php.cn) !


Étiquettes associées:
source:php.cn
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
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!