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

來源:互聯網
上載者:User
泛型允許您延遲編寫類或方法中的編程元素的資料類型的規範,直到實際在程式中使用它的時候。換句話說,在聲明類或方法的時候由於不知道使用者要傳入什麼樣類型的參數,所以在傳入類型的地方“挖一個坑(“<T>”)",使用它的時候我們再用具體資料類型填上。

泛型類:

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

 

 class Data          {              public int  n_data;           }

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

  

 class Data<T>             {               public T n_data;             }

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

 

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

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

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

結果為:2

泛型方法:

   這個我們以swap交換方法為例,在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;  }

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

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

結果:666 HC 這與C++的倒是很相似啊

泛型委派:

  委託也有泛型的,接著上面的例子: 

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


結果:

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

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

  • 相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.