c#中泛型的型別安全與效能提高

來源:互聯網
上載者:User
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Collections;
  6. namespace 泛型
  7. {
  8.     class Program
  9.     {
  10.         static void Main(string[] args)
  11.         {
  12.             // 泛型解決的問題:
  13.             //一 避免拆箱與裝箱
  14.             //例: 我們在寫一個方法時如果有這樣的需求,傳一個參數,這個參數可以是int或者string,或者其他的自訂的對象,或者結構,這時有兩種做法,1分別寫2個方法做重載,2用object做參數。。
  15.             //1分別寫2個方法做重載,增加了代碼量,而且方法內好多代碼是相同的,不推薦
  16.             //2用object做參數。。 這樣必定在方法體內有大量的裝箱拆箱,類型轉換,影響效能,不推薦 
  17.            
  18.             //例:非泛型ArrayList
  19.             ArrayList arr = new ArrayList();
  20.             arr.Add(100); 
  21.             //public virtual int Add(object value); 我們看add方法的定義,是以object value做參數的
  22.             //所以在Add傳入實值型別(100)時,必然會產生隱式裝箱
  23.             //然後我們在讀取值時:必須這樣寫
  24.             int value = (int)arr[0]; //在此處,為了讀取出我們的實值型別資料,又出現了拆箱操作。
  25.             Console.WriteLine( value );
  26.             //以上操作頻繁拆箱裝箱,不推薦 !
  27.             //下面示範一下泛型集合類的操作
  28.             List<int> list = new List<int>();
  29.             list.Add(100);
  30.             int value2 = list[0];
  31.             Console.WriteLine( value2 );
  32.             //以上操作中,泛型定義為int,是在JIT編譯器動態產生類中使用,不會產生裝箱與拆箱操作。
  33.             //二,型別安全
  34.             //如果沒有泛型,我們之前的ArrayList中是用object做參數,那麼就是說,可以添加int也可以是string
  35.             ArrayList arr3 = new ArrayList();
  36.             arr3.Add(100);
  37.             arr3.Add( "100");
  38.             //以上代碼是不會在編譯時間報錯的
  39.             //然後我們跌代輸出
  40.             foreach (int i in arr3)
  41.             {
  42.                 Console.WriteLine(i);
  43.             }
  44.             //運行時出錯了,呵呵,到底是按int處理,還是string誰知道?
  45.             //雖然我們可以手動避免這種問題,我add時注意不就行了嗎?
  46.             //但這樣是類型不安全的,泛型做了一種強制安全
  47.             List<int> list2 = new List<int>();
  48.             list2.Add(100);
  49.             //list2.Add("100"); //編譯時間報錯
  50.             Console.ReadLine();
  51.         }
  52.     }
  53. }
相關文章

聯繫我們

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