程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> C#學習日記30---泛型類、泛型方法、泛型委托

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

編輯:C#入門知識

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


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

泛型類:

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

  class Data

{

public int n_data;

}

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

   class Data

{

public T n_data;

}

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

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

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

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

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Example
{
    class Data //泛型類
    {
        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 data = new Data(5);
            data.n_data[2] = 2;
           Console.WriteLine(data.n_data[2]);
        }
    }
}


結果為:2

泛型方法:

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

#include 

using namespace std;
template 
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<

結果: 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(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+	+b); //結果 666    HC
        }
    }
}


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

 

泛型委托:

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

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Example
{
    public delegate void MyDelegate();//泛型委托
    class Data
    {
        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 + 	 + b);

        }
  }
      class program
       { 
         static void Main(string[] args)
          {
            Data data = new Data();
            data.setvalue(HC,666);
            MyDelegate my = new MyDelegate(data.swap);
            my += data.printvalue;
            my();  //結果 666  HC      
           }
        
       }
      
   }


結果: 

\

 

 

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

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved