首頁  >  文章  >  後端開發  >  C#學習日記30---泛型類別、泛型方法、泛型委託

C#學習日記30---泛型類別、泛型方法、泛型委託

黄舟
黄舟原創
2017-01-21 15:46:351329瀏覽

泛型可讓您延遲編寫類別或方法中的程式設計元素的資料類型的規範,直到實際在程式中使用它的時候。換句話說,在聲明類別或方法的時候由於不知道使用者要傳入什麼樣類型的參數,所以在傳入類型的地方「挖一個坑(「<T>」)",使用它的時候我們再用具體資料類型填上。

泛型類別:

  根據前面所學知識我們定義一個類別:

 

 class Data
          {
              public int  n_data;
           }

  此時n_data的資料型態已經確定為int型,所以為他賦值的時候只能為寫int 類型,如果改為下面的泛型類別:

  

 class Data<T>
             {
               public T n_data;
             }

此時n_data的資料型態還不確定是什麼類型,所以為他賦值的時候需要指定T也就是n_data的型別,也就是填坑,

 

也就是n_data的型別,也就是填坑,

 了,上面的例子中是不能夠指定T為數組的,如果要讓n_data的型別為數組的話,下面的例子可以滿足:

 Data<int> data = new Data<int>();    //指定T为int
  Data<string> data = new Data<string>();  //指定T为string

結果為:2

泛型方法:

 這個 㟎我們以sw交換方法為例,在C++中swap函數是這麼寫的:

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]);  
        }  
    }  
}

結果: 1  0

如果a與b是字元類型以上函數也適用。 C#swap方法如下:

#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;  
}

結果:666      HC      這與C++的倒是非常相似ee

結果:

       關於泛型就介紹這麼多了,又什麼錯誤的地方歡迎指出^_^

以上就是 C#學習日記30---泛型類、泛型方法、泛型委託的內容,更多相關內容請關注PHP中文網(www.php.cn)!

C#學習日記30---泛型類別、泛型方法、泛型委託

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn