亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C# > 正文

C#泛型實例詳解

2020-01-24 02:32:08
字體:
來源:轉載
供稿:網友

本文以實例形式講述了C#泛型的用法,有助于讀者深入理解C#泛型的原理,具體分析如下:

首先需要明白什么時候使用泛型:

當針對不同的數據類型,采用相似的邏輯算法,為了避免重復,可以考慮使用泛型。

一、針對類的泛型

針對不同類型的數組,寫一個針對數組的"冒泡排序"。

1.思路

● 針對類的泛型,泛型打在類旁。
● 由于在"冒泡排序"中需要對元素進行比較,所以泛型要約束成實現IComparable接口。

  class Program  {    static void Main(string[] args)    {      SortHelper<int> isorter = new SortHelper<int>();      int[] iarray = {8, 7, 1, 2, 12};      isorter.BubbleSort(iarray);      foreach (int item in iarray)      {        Console.Write(item+ ", ");      }      Console.ReadKey();    }  }   public class SortHelper<T> where T : IComparable  {    public void BubbleSort(T[] array)     {      int length = array.Length;      for (int i = 0; i <= length -2; i++)      {        for (int j = length - 1; j >= 1; j--)        {          if (array[j].CompareTo(array[j-1]) < 0)          {            T temp = array[j];            array[j] = array[j - 1];            array[j - 1] = temp;          }        }      }    }  } 

運行結果如下圖所示:

2.關于泛型約束

where T : IComparable 把T約束為實現IComparable接口
where T : class
where T : struct
where T : IComparable, new() 約束泛型必須有構造函數

3.關于冒泡算法

● 之所以for (int i = 0; i <= length -2; i++),這是邊界思維,比如有一個長度為5的數組,如果0號位元素最終調換到4號位,每次調一個位,需要經過4次才能到4號位,即for(int i = 0; i <= 5-2, i++),i依次為0, 1, 2, 4,期間經歷了4次。

● 至于for (int j = length - 1; j >= 1; j--)循環,即遍歷從最后一個元素開始到索引為1的元素,每次與前一個位置上的元素比較。

4.關于比較

int類型之所以能比較,是因為int類型也實現了IComparable接口。

byte類型也一樣實現了IComparable接口。

二、自定義一個類,使之也能實現冒泡算法

冒泡算法涉及到元素比較,所以自定義類必須實現IComparable接口。

  class Program  {    static void Main(string[] args)    {      Book[] bookArray = new Book[2];      Book book1 = new Book(100, "書一");      Book book2 = new Book(80, "書二");      bookArray[0] = book1;      bookArray[1] = book2;       Console.WriteLine("冒泡之前:");      foreach (Book b in bookArray)      {        Console.WriteLine("書名:{0},價格:{1}", b.Title, b.Price);      }       SortHelper<Book> sorter = new SortHelper<Book>();      sorter.BubbleSort(bookArray);      Console.WriteLine("冒泡之后:");      foreach (Book b in bookArray)      {        Console.WriteLine("書名:{0},價格:{1}", b.Title, b.Price);      }      Console.ReadKey();    }  }   public class SortHelper<T> where T : IComparable  {    public void BubbleSort(T[] array)     {      int length = array.Length;      for (int i = 0; i <= length -2; i++)      {        for (int j = length - 1; j >= 1; j--)        {          if (array[j].CompareTo(array[j-1]) < 0)          {            T temp = array[j];            array[j] = array[j - 1];            array[j - 1] = temp;          }        }      }    }  }   //自定義類實現IComparable接口  public class Book : IComparable  {    private int price;    private string title;     public Book(){}     public Book(int price, string title)    {      this.price = price;      this.title = title;    }     public int Price    {      get { return this.price; }    }     public string Title    {      get { return this.title; }    }     public int CompareTo(object obj)    {      Book book = (Book)obj;      return this.Price.CompareTo(book.Price);    }  }

運行結果如下圖所示:

三、針對方法的泛型

繼續上面的例子,自定義一個類,并定義泛型方法。

  //方法泛型  public class MethodSortHelper  {    public void BubbleSort<T>(T[] array) where T : IComparable    {      int length = array.Length;      for (int i = 0; i <= length - 2; i++)      {        for (int j = length - 1; j >= 1; j--)        {          if (array[j].CompareTo(array[j - 1]) < 0)          {            T temp = array[j];            array[j] = array[j - 1];            array[j - 1] = temp;          }        }      }    }  } 

主程序如下:

  class Program  {    static void Main(string[] args)    {      Book[] bookArray = new Book[2];      Book book1 = new Book(100, "書一");      Book book2 = new Book(80, "書二");      bookArray[0] = book1;      bookArray[1] = book2;       Console.WriteLine("冒泡之前:");      foreach (Book b in bookArray)      {        Console.WriteLine("書名:{0},價格:{1}", b.Title, b.Price);      }       MethodSortHelper sorter = new MethodSortHelper();      sorter.BubbleSort<Book>(bookArray);      Console.WriteLine("冒泡之后:");      foreach (Book b in bookArray)      {        Console.WriteLine("書名:{0},價格:{1}", b.Title, b.Price);      }      Console.ReadKey();    }  }   

運行結果如下圖所示:

另外,使用泛型方法的時候,除了按以下:

MethodSortHelper sorter = new MethodSortHelper(); sorter.BubbleSort<Book>(bookArray);

還可以這樣寫:  

      MethodSortHelper sorter = new MethodSortHelper();       sorter.BubbleSort(bookArray); 
     

可見,泛型方法可以根據數組實例隱式推斷泛型是否滿足條件。

四、泛型的其它優點

1.避免隱式裝箱和拆箱

以下包含隱式裝箱和拆箱:

ArrayList list = new ArrayList();for(int i = 0; i < 3; i++){  list.Add(i); //Add接收的參數類型是引用類型object,這里包含了隱式裝箱}for(int i = 0; i < 3; i++){  int value = (int)list[i]; //引用類型強轉成值類型,拆箱  Console.WriteLine(value);}

使用泛型避免隱式裝箱和拆箱:

List<int> list = new List<int>();for(int i = 0; i < 3; i++){  list.Add(i);}for(int i = 0; i < 3; i++){  int value = list[i];  Console.WriteLine(value);}

2.能在編譯期間及時發現錯誤

不使用泛型,在編譯期不會報錯的一個例子:

ArrayList list = new ArrayList();int i = 100;list.Add(i);string value = (string)list[0];

使用泛型,在編譯期及時發現錯誤:

List<int> list = new List<int>();int i = 100;list.Add(i);string value = (string)list[0];

五、使用泛型的技巧

1.在當前文件中給泛型取別名

using IntList = List<int>;IntList list = new IntList();list.Add(1);

2.在不同文件中使用泛型別名,定義一個類派生于泛型

public class IntList : List<int>{}
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久久久久久久久久久av| 日本韩国欧美精品大片卡二| 国产一区二区三区三区在线观看| 日韩亚洲精品视频| 亚洲精品色婷婷福利天堂| 国产v综合ⅴ日韩v欧美大片| 久久精品视频导航| 国内精久久久久久久久久人| 一本色道久久88综合日韩精品| 国产97色在线|日韩| 91精品国产综合久久香蕉最新版| 国产精品久久久久久久久久久久久久| 日韩av成人在线| 日韩精品视频在线| 国产一区二区三区丝袜| 色偷偷噜噜噜亚洲男人的天堂| 欧美一区二区.| 国产中文字幕亚洲| 欧美国产日韩免费| 久久精品国产久精国产思思| 色综合视频一区中文字幕| 成人免费在线视频网址| 亚洲激情小视频| 欧美精品久久一区二区| 日韩欧美视频一区二区三区| 国产精品6699| 美女黄色丝袜一区| 亚洲毛片在线观看.| 精品视频一区在线视频| 91av在线播放视频| 欧美成人中文字幕在线| 影音先锋欧美在线资源| 九九精品在线视频| 久久精品亚洲国产| 日韩欧美在线中文字幕| 在线成人激情视频| 中文字幕在线看视频国产欧美| 555www成人网| 亚洲成色www8888| 久久综合久中文字幕青草| 久久色精品视频| 日本高清不卡在线| 综合国产在线观看| 亚洲欧美日韩图片| 色久欧美在线视频观看| 亚洲淫片在线视频| 另类少妇人与禽zozz0性伦| 精品国偷自产在线| 成人情趣片在线观看免费| 欧美性视频精品| 一本大道香蕉久在线播放29| 日韩在线观看免费全集电视剧网站| 亚洲欧美国产精品| 亚洲精品在线不卡| 亚洲女成人图区| 久久久久这里只有精品| 久久综合亚洲社区| 国产精品色悠悠| 国产精品久久久av久久久| 国产69精品久久久| 午夜精品久久久久久久久久久久久| 亚洲欧美制服另类日韩| 久久男人av资源网站| 羞羞色国产精品| 亚洲另类图片色| 国内揄拍国内精品少妇国语| 国产午夜精品理论片a级探花| 97精品一区二区三区| 国产精品免费在线免费| 中文欧美日本在线资源| 91av网站在线播放| 日韩专区中文字幕| 成人激情视频小说免费下载| 欧美高清自拍一区| 欧洲亚洲女同hd| 色婷婷综合成人av| 亚洲精品中文字| 中国china体内裑精亚洲片| 韩国三级电影久久久久久| 懂色aⅴ精品一区二区三区蜜月| 精品亚洲国产成av人片传媒| 国产丝袜高跟一区| 久久久精品国产一区二区| 国产日本欧美视频| 日韩av中文字幕在线| 欧美视频免费在线| xvideos国产精品| 九色精品免费永久在线| 欧美激情免费在线| 日韩av电影院| 九九热这里只有精品免费看| 国产精品久久久久久婷婷天堂| 精品国产31久久久久久| 色噜噜狠狠狠综合曰曰曰| 久久精品视频在线观看| 国产精品香蕉国产| 日韩av网站电影| 亚洲色图日韩av| 狠狠躁夜夜躁人人爽天天天天97| 日本中文字幕成人| 精品久久久久久| 欧美大成色www永久网站婷| 亚洲美女在线观看| 日本高清视频一区| 国产欧美久久久久久| 91精品在线观看视频| 91精品国产91久久| 亚洲欧美日韩在线高清直播| 伦伦影院午夜日韩欧美限制| 91精品国产高清久久久久久久久| 亚洲伊人一本大道中文字幕| 国产精品爱久久久久久久| 成人黄色av网站| 日本一区二区三区在线播放| 色哟哟网站入口亚洲精品| 国产日韩欧美自拍| 色偷偷9999www| 国产亚洲精品综合一区91| 欧美激情图片区| 日韩成人小视频| 欧美另类99xxxxx| 中文字幕欧美精品日韩中文字幕| 中文字幕亚洲图片| 欧美大胆在线视频| 亚洲成人在线视频播放| 亚洲图片在线综合| 亚洲第一页自拍| 精品久久香蕉国产线看观看亚洲| 国产成人在线精品| 国内精品一区二区三区四区| 国产精品丝袜高跟| 亚洲国产精品成人av| 亚洲成年人在线播放| 欧美亚洲成人网| 色99之美女主播在线视频| 亚洲va国产va天堂va久久| 一区二区三区国产在线观看| 日韩av免费观影| 色妞色视频一区二区三区四区| 国产精品久久久久久久久久久不卡| 午夜精品一区二区三区在线| 亚洲精品免费av| 欧美国产日韩一区二区三区| 久久久久久久久久久亚洲| 欧美激情视频在线观看| 4438全国亚洲精品在线观看视频| 日韩av在线直播| 欧美性猛交xxxx富婆弯腰| 狠狠色噜噜狠狠狠狠97| 亚洲精品xxxx| 色婷婷久久一区二区| 亚洲欧美色婷婷| 国产日韩精品在线播放| 精品国模在线视频| 亚洲欧美国产精品专区久久| 亚洲aⅴ日韩av电影在线观看| 国产在线精品播放| 亚洲香蕉在线观看| 欧美大片免费观看在线观看网站推荐| 不卡中文字幕av| 亚洲免费人成在线视频观看| 欧美性猛交xxxx乱大交3| 欧美日韩成人精品| 日韩高清电影免费观看完整版|