[.NET學習筆記]C#新特性——泛型

來源:互聯網
上載者:User
  泛型概述

 

C# 泛型稱之為型別參數。泛型要點:

  • 在定義方法中,通常是將變數的值作為參數,但其實這個變數的類型本身也可以作為參數。
  • 泛型允許在調用的時候再指定這個型別參數是什麼。
  • 在.net中,泛型能夠給我們帶來的三個明顯好處是:型別安全、代碼重用、減少裝箱和拆箱操作。
  • 通過泛型可以定義型別安全類,而不會損害型別安全、效能或工作效率。
  • 可以用任何類型來聲明和使用它。
  • 使用 ﹤ 和 ﹥ 括弧,以便將一般型別參數括起來。
泛型的幾個好處執行個體:
public class 泛型    {        //非泛型:類型不安全-編譯時間不能發現錯誤        //執行提示:System.InvalidCastException: 指定的轉換無效。        public void ShowValues1()        {            ArrayList list = new ArrayList();            list.Add(44);            list.Add("string");  //編譯通過            foreach (int i in list)            {                Console.WriteLine("輸出值:" + i);            }        }        //泛型:型別安全-編譯時間即發現類型不符        public void ShowValues2()        {            List<string> list = new List<string>();            list.Add(44);  //--編譯出錯            list.Add("string");            foreach (string s in list)            {                Console.WriteLine("輸出值:" + s);            }        }        //非泛型:需要顯式類型轉換,損失效能        public void ShowValues3()        {            ArrayList list = new ArrayList();            list.Add(44);            int i = (int)list[0];            Console.WriteLine("輸出值:" + i);        }        //泛型:使用時類型是確定的,無需進行類型轉換        public void ShowValues4()        {            List<int> list = new List<int>();            list.Add(44);            int i = list[0];            Console.WriteLine("輸出值:" + i);        }    }

 

自訂泛型,及調用。從中可以看出泛型在代碼重用中的作用。
//自訂一個泛型類    public class MyGeneric<T>    {        public void ShowValues(T a)        {            Console.WriteLine("輸出值:" + a.ToString());        }    }    //用不同的型別參數調用自訂泛型    public class Test_MyGeneric    {                public void Test_int_ShowValues()        {            MyGeneric<int> fanXing = new MyGeneric<int>();            fanXing.ShowValues(100);        }        public void Test_string_ShowValues()        {            MyGeneric<string> fanXing = new MyGeneric<string>();            fanXing.ShowValues("Hello");        }        public void Test_doube_ShowValues()        {            MyGeneric<double> fanXing = new MyGeneric<double>();            fanXing.ShowValues(3.14);        }    //定義泛型方法:交換兩個變數        public void Swap<T>(ref T a, ref T b)        {            T temp;            temp = a;            a = b;            b = temp;        }    //交換整數        public void TestSwap1()        {            int t = 1;            int g = 2;            Swap(ref t, ref g);            Console.WriteLine("輸出值t:" + t.ToString());            Console.WriteLine("輸出值g:" + g.ToString());        }    //交換字串        public void TestSwap2()        {            string t = "str1";            string g = "str2";            Swap(ref t, ref g);            Console.WriteLine("輸出值t:" + t.ToString());            Console.WriteLine("輸出值g:" + g.ToString());        }    //交換對象        public class usrEntity        {            public string username { get; set; }            public string sex { get; set; }        }        public void TestSwap3()        {            usrEntity t = new usrEntity(){ username = "小明", sex = "男" };            usrEntity g = new usrEntity() { username = "小紅", sex = "女" };            Swap(ref t, ref g);            Console.WriteLine("輸出值t:" + t.username + ":" + t.sex);            Console.WriteLine("輸出值g:" + g.username + ":" + g.sex);        }    }

 

注意:本文根據相關培訓資料整理而成。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.