C#泛型的初步理解

一.先讓咱們認識一下泛型。程序員

1.1什麼是泛型?算法

            1.1.1泛型是程序設計語言的一種特性。容許程序員在強類型程序設計語言中編寫代碼時定義一些可變部分,那些部分在使用前必須做出指明。各類程序設計語言和其編譯器、運行環境對泛型的支持均不同。將類型參數化以達到代碼複用提升軟件開發工做效率的一種數據類型。泛型類是引用類型,是堆對象,主要是引入了類型參數這個概念。c#

—百度百科數據結構

            1.1.2上面是比較官方的解釋,下面說說我得理解吧,泛型實際上是一種爲了減小咱們代碼量而引入的一種模板,在這個模板中主要封裝一些特殊的算法,讓咱們能夠在處理一些不一樣類型的數據但對數據的處理具備相同的邏輯算法時,只須要寫出一個模板,就能夠處理多種數據類型的方法,無需爲每種類型都寫一個處理方法函數

 1.2在c#中的經常使用泛型性能

           1.2.1在c#中咱們能夠定義泛型類,泛型接口,泛型方法,泛型委託 。。。在這裏我就不一 一列舉了this

            a. 泛型類的定義格式spa

               修飾符 class 類名<T,U,.....>{    類成員    }設計

               例:code

              

    //簡單的泛型類
    public class MyClassTemplate<T, U>where T:struct { private T t1; public T T1 { get { return t1; } set { t1 = value; } } private U u1; public U U1 { get { return u1; } set { u1 = value; } } //構造函數
        public MyClassTemplate(T t1,U u1) { this.t1 = t1; this.u1 = u1; } public void Print() { Console.WriteLine(t1); } }

 

            b.泛型接口的定義格式

               修飾符 interface 接口名<T,U....>{     聲明     } 

             例

           

    //泛型接口
    interface MyInterfaceTemplate<T,U> { void PrintTU(T t1, U u1); }

 

            c.泛型方法的定義格式

               修飾符 返回類型  方法名<T,U....>(參數列表){     函數體    } 

                例

                 

    //簡單的泛型函數
    public class Myfun { //泛型函數
         public static  void TempleteFun<T, C>( T x, C y) { T t1 = x; C c1 = y; Console.WriteLine(t1); Console.WriteLine(c1); } }

 

   PS:<>裏面表明的是泛型中可被代替的數據類型 。

二.爲何使用泛型

   使用泛型行的最大好處就是代碼重用,合理的使用泛型能夠大大的解決咱們編寫代碼的數量,同時也能夠提升咱們的程序性能

下面我經過一個簡單的例子講解

   如今咱們須要一個處理兩個數據類型,int 類型和String的數據,他們都須要用到棧的操做,當我沒沒有泛型的時候須要寫出兩個棧

的數據結構

  2.1 處理int類型

public class Stack { private int[] m_item; public int Pop(){...} public void Push(int item){...} public Stack(int i) { this.m_item = new int[i]; } }

2.2處理字符串類型

public class Stack { private string[] m_item; public string Pop(){...} public void Push(string item){...} public Stack(int i) { this.m_item = new string[i]; } }

2.3固然咱們也能夠用object代替int 和string類型的

public class Stack { private object[] m_item; public object Pop(){...} public void Push(object item){...} public Stack(int i) { this.m_item = new[i]; } }

2.4上面這個棧能夠處理任何數據類型的數據,應爲object是全部類的基類。雖然這樣寫能夠處理各類數據類型,但在其中存在這拆箱和裝箱,若是數據太多會影響到程序的性能,
所以在c#2.0的時候泛型就此誕生了,他借鑑C++的模板爲咱們提供了泛型,在使用泛型的時候程序會在編譯階段根據咱們提供的類型生成相應的二進制代碼,無須進行裝箱和拆箱

所以在上面的代碼中咱們可使用泛型解決代碼以下,這樣咱們也能夠對於任何數據類型均可以使用這個棧了

public class Stack<T> { private T[] m_item; public T Pop(){...} public void Push(T item){...} public Stack(int i) { this.m_item = new T[i]; } }
相關文章
相關標籤/搜索