最近2018中文字幕在日韩欧美国产成人片_国产日韩精品一区二区在线_在线观看成年美女黄网色视频_国产精品一区三区五区_国产精彩刺激乱对白_看黄色黄大色黄片免费_人人超碰自拍cao_国产高清av在线_亚洲精品电影av_日韩美女尤物视频网站

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
[C#基礎(chǔ)知識梳理系列]專題六:泛型基礎(chǔ)篇——為什么引入泛型

引言:

10年積累的網(wǎng)站設(shè)計制作、做網(wǎng)站經(jīng)驗,可以快速應(yīng)對客戶對網(wǎng)站的新想法和需求。提供各種問題對應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識你,你也不認(rèn)識我。但先網(wǎng)站制作后付款的網(wǎng)站建設(shè)流程,更有廣安免費網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。

前面專題主要介紹了C#1中的2個核心特性——委托和事件,然而在C# 2.0中又引入一個很重要的特性,它就是泛型,大家在平常的操作中肯定會經(jīng)常碰到并使用它,如果你對于它的一些相關(guān)特性還不是很了解,那就讓我們一起進(jìn)入本專題的學(xué)習(xí)的。

 

一、泛型的是什么

泛型的英文解釋為generic,當(dāng)然我們查詢這個單詞時,更多的解釋是通用的意思,然而有些人會認(rèn)為明明是通用類型,怎么成泛型了的,其實這兩者并不沖突的,泛型本來代表的就是通用類型,只是微軟可能有一個比較官方的此來形容自己引入的特性而已,既然泛型是通用的, 那么泛型類型就是通用類型的,即泛型就是一中模子。 在生活中,我們經(jīng)常會看到模子,像我們平常生活中用的桶子就是一個模子,我們可以用桶子裝水,也可以用來裝油,牛奶等等,然而把這些都裝進(jìn)桶子里面之后,它們都會具有桶的形狀(水,牛奶和油本來是沒有形的),即具有模子的特征。同樣,泛型也是像桶子一樣的模子,我們可以用int類型,string類型,類去實例化泛型,實例化之后int,string類型都會具有泛型類型的特征就是說可以使用泛型類型中定義的方法,如List泛型,如果用int去初始化它后,List的實例就可以用List泛型中定義的所有方法,用string去初始化它也一樣,和我們生活中的用桶裝水,牛奶,油等非常類似

二、C# 2.0為什么要引入泛型

大家通過第一部分知道了什么是泛型,然而C#2.0中為什么要引入泛型的?這答案當(dāng)然是泛型有很多好處的。下面通過一個例子來說明C# 2.0中為什么要引入泛型,然后再介紹下泛型所帶來的好處有哪些。

當(dāng)我們要寫一個比較兩個整數(shù)大小的方法時,我們可能很快會寫出下面的代碼:

[C# 基礎(chǔ)知識梳理系列]專題六:泛型基礎(chǔ)篇——為什么引入泛型
 public class Compare
    {
// 返回兩個整數(shù)中大的那一項
        public static int Compareint(int int1, int int2)
        {
   if (int1.CompareTo(int2) > 0)
            {
       return int1;
            }

   return int2;
        }
    }
[C# 基礎(chǔ)知識梳理系列]專題六:泛型基礎(chǔ)篇——為什么引入泛型

然而需求改變?yōu)橛忠獙崿F(xiàn)比較兩個字符串的大小的方法時,我們又不得不在類中實現(xiàn)一個比較字符串的方法:

[C# 基礎(chǔ)知識梳理系列]專題六:泛型基礎(chǔ)篇——為什么引入泛型
  // 返回兩個字符串中大的一項
        public static string Comparestring(string str1, string str2)
        {
   if (str1.CompareTo(str2) > 0)
            {
       return str1;
            }

   return str2;
        }
[C# 基礎(chǔ)知識梳理系列]專題六:泛型基礎(chǔ)篇——為什么引入泛型

如果需求又改為要實現(xiàn)比較兩個對象之間的大小時,這時候我們又得實現(xiàn)比較兩個對象大小的方法,然而我們中需求中可以看出,需求中只是比較的類型不一樣的,其實現(xiàn)方式是完全一樣的,這時候我們就想有沒有一種類型是通用的,我們可以把任何類型當(dāng)做參數(shù)傳入到這個類型中去實例化為具體類型的比較,正是有了這個想法,同時微軟在C#2.0中也想到了這個問題,所以就導(dǎo)致了C#2.0中添加了泛型這個新的特性,泛型就是——通用類型,有了泛型之后就可以很好的幫助我們剛才遇到的問題的,這樣就解決了我們的第一個疑問——為什么要引入泛型。下面是泛型的實現(xiàn)方法:

[C# 基礎(chǔ)知識梳理系列]專題六:泛型基礎(chǔ)篇——為什么引入泛型
 public class Compare where T : IComparable
    {
public  static T CompareGeneric(T t1, T t2)
        {
   if (t1.CompareTo(t2) > 0)
            {
       return t1;
            }
   else
            {
       return t2;
            }
        }
    }
[C# 基礎(chǔ)知識梳理系列]專題六:泛型基礎(chǔ)篇——為什么引入泛型

這樣我們就不需要針對每個類型實現(xiàn)一個比較方法,我們可以通過下面的方式在主函數(shù)中進(jìn)行調(diào)用的:

[C# 基礎(chǔ)知識梳理系列]專題六:泛型基礎(chǔ)篇——為什么引入泛型
 public class Program
    {
static void Main(string[] args)
        {
            Console.WriteLine(Compare.CompareGeneric(3, 4));
            Console.WriteLine(Compare.CompareGeneric("abc", "a"));
            Console.Read();
        }
    }
[C# 基礎(chǔ)知識梳理系列]專題六:泛型基礎(chǔ)篇——為什么引入泛型

通過上面的代碼大家肯定可以理解C# 2.0中為什么要引入泛型的,然而泛型可以給我們帶什么好處的呢?從上面的例子可以看出,泛型可以幫助我們實現(xiàn)代碼的重用,大家很清楚——面向?qū)ο笾械睦^承也可以實現(xiàn)代碼的重用,然而泛型提供的代碼的重用,確切的說應(yīng)該是“算法的重用”(我理解的算法的重用是我們在實現(xiàn)一個方法中,我們只要去考慮如何去實現(xiàn)算法,而不需要考慮算法操作的數(shù)據(jù)類型的不同,這樣的算法實現(xiàn)更好的重用,泛型就是提供這樣的一個機(jī)制)。

然而泛型除了實現(xiàn)代碼的重用的好處外,還有可以提供更好的性能和類型安全,下面通過下面一段代碼來解釋下為什么有這兩個好處的。

[C# 基礎(chǔ)知識梳理系列]專題六:泛型基礎(chǔ)篇——為什么引入泛型
using System;using System.Collections;using System.Collections.Generic;using System.Diagnostics;
namespace GeneralDemo
{
public class Program
    {
static void Main(string[] args)
        {
            Stopwatch stopwatch= new Stopwatch();

   // 非泛型數(shù)組
            ArrayList arraylist = new ArrayList();

   // 泛型數(shù)組
            List genericlist= new List();
   // 開始計時
            stopwatch.Start();
   for (int i = 1; i < 10000000; i++)
            {
                genericlist.Add(i);
       ////arraylist.Add(i);
            }

   // 結(jié)束計時
            stopwatch.Stop();

   // 輸出所用的時間
            TimeSpan ts = stopwatch.Elapsed;
   string elapsedTime = String.Format("{0:00}:{1:00}:{2:00}.{3:00}",
             ts.Hours, ts.Minutes, ts.Seconds,
             ts.Milliseconds/10);
            Console.WriteLine("運行的時間:" + elapsedTime);
            Console.Read();
        }
    }
}
[C# 基礎(chǔ)知識梳理系列]專題六:泛型基礎(chǔ)篇——為什么引入泛型

當(dāng)我們把 arraylist.Add(i);這行代碼注釋掉來測試向泛型數(shù)組中加入數(shù)據(jù)的運行時間,下面是我機(jī)器的上運行的一個截圖:

[C# 基礎(chǔ)知識梳理系列]專題六:泛型基礎(chǔ)篇——為什么引入泛型

當(dāng)我們把 genericlist.Add(i);這行代碼注釋掉來測試向一個非泛型數(shù)組中加入數(shù)據(jù)的運行時間,下面附上我機(jī)器上的運行的時間截圖:

[C# 基礎(chǔ)知識梳理系列]專題六:泛型基礎(chǔ)篇——為什么引入泛型

從兩個結(jié)果中就可以明顯看出 向泛型數(shù)組中的加入數(shù)據(jù)的效率遠(yuǎn)高于非泛型數(shù)組。有圖有真相,這樣就充分說明泛型的另一個好處——高性能,然而泛型類型也保證了類型安全(大家都知道,C#是一個強(qiáng)類型的語言的,強(qiáng)類型指的是在每定義一個變量都需要指定變量的類型),當(dāng)我們向這個泛型genericlist數(shù)組中添加string類型的值時,此時就會造成編譯器報錯 “無法從“string”轉(zhuǎn)換為’int‘ ”

 

三、小結(jié)

本專題主要和大家分享了C# 2.0中為什么會引入委托,以及委托的好處,相信通過上面的介紹大家已經(jīng)對委托有一個簡單的認(rèn)識以及對于泛型所帶來的好處也有一個全面的認(rèn)識,對于泛型的高性能本專題并沒有給出原因,這個內(nèi)容將會在下面一個專題向大家介紹。

 

 


本文標(biāo)題:[C#基礎(chǔ)知識梳理系列]專題六:泛型基礎(chǔ)篇——為什么引入泛型
地址分享:http://fisionsoft.com.cn/article/ghioie.html