日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

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

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
不得不提的C#2.0泛型約束

C#泛型是.NET中最常見(jiàn)的一種特性,接下來(lái)我們就來(lái)了解關(guān)于C#泛型的一些特性,看一下代碼:

成都創(chuàng)新互聯(lián)是一家集網(wǎng)站建設(shè),尖扎企業(yè)網(wǎng)站建設(shè),尖扎品牌網(wǎng)站建設(shè),網(wǎng)站定制,尖扎網(wǎng)站建設(shè)報(bào)價(jià),網(wǎng)絡(luò)營(yíng)銷,網(wǎng)絡(luò)優(yōu)化,尖扎網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競(jìng)爭(zhēng)力。可充分滿足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時(shí)我們時(shí)刻保持專業(yè)、時(shí)尚、前沿,時(shí)刻以成就客戶成長(zhǎng)自我,堅(jiān)持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實(shí)用型網(wǎng)站。

 
 
 
  1. public class Dictionary 
  2. {  
  3.     public void Add(K key, V value)  
  4.     {  
  5.           
  6.         if (key.CompareTo(x) < 0) {}   // Error, no CompareTo method  
  7.           
  8.     }  

由于K可以任何類型,所以可想而知,key只能使用Object中定義的ToString等方法。代碼在編譯時(shí)就出錯(cuò)了,因?yàn)閗ey可能不含有CompareTo方法。那么如何解決呢?一種容易想到的辦法就是把key轉(zhuǎn)換成IComparable,那么代碼就變成了這樣:

 
 
 
  1. public class Dictionary 
  2. {  
  3.     public void Add(K key, V value)  
  4.     {  
  5.           
  6.         if (((IComparable)key).CompareTo(x) < 0) {}  
  7.           
  8.     }  

這次沒(méi)有編譯時(shí)錯(cuò)誤了。但是還是要小心,因?yàn)閷?shí)際使用時(shí),如果你使用了一個(gè)沒(méi)有實(shí)現(xiàn)IComparable的類型作參數(shù),就會(huì)出現(xiàn)InvalidCastException異常。為了提供強(qiáng)編譯時(shí)檢查和減少類型轉(zhuǎn)換,C#2.0泛型引入了約束(Constraints)這個(gè)概念,這是一個(gè)泛型的可選項(xiàng)。語(yǔ)法是使用where關(guān)鍵字指明約束的類型參數(shù),然后加冒號(hào),再加上類,接口,類型參數(shù)等。我們把代碼變成了這樣:

 
 
 
  1. public class Dictionary where K: IComparable  
  2. {  
  3.     public void Add(K key, V value)  
  4.     {  
  5.           
  6.         if (key.CompareTo(x) < 0) {}  
  7.           
  8.     }  

這樣就保證了任何為K類型參數(shù)提供的類型都實(shí)現(xiàn)了IComparable接口。所以我們的key就可以使用CompareTo方法了。如果我們?cè)谑褂脮r(shí)提供了沒(méi)有實(shí)現(xiàn)IComparable接口的類型,就會(huì)出現(xiàn)編譯時(shí)錯(cuò)誤,我們的約束可以不止是一個(gè)接口,可以是多個(gè),還可以是跟類或其他約束混合,請(qǐng)看下面代碼:

 
 
 
  1. public class EntityTable 
  2.     where K: IComparable, IPersistable  
  3.     where E: Entity, new()  
  4. {  
  5.     public void Add(K key, E entity)  
  6.     {  
  7.           
  8.         if (key.CompareTo(x) < 0) {}  
  9.           
  10.     }  

對(duì)于約束new()可能不好理解。其實(shí)這個(gè)約束保證了提供給類型參數(shù)E的類型必須有一個(gè)public,無(wú)參的構(gòu)造器。這樣它就允許泛型類使用new E()創(chuàng)建這個(gè)類型的實(shí)例。另外指出的是,雖然可以有多個(gè)接口作約束,但至多只能有一個(gè)類。

類型參數(shù)必須小心地使用。雖然它提供了更強(qiáng)編譯時(shí)類型檢查,但是卻也約束了泛型類型的一些可能的使用情況。比如說(shuō),有一個(gè)泛型類List約束T實(shí)現(xiàn)IComparable接口,這樣就可以在List的Sort方法中比較項(xiàng)了。然而,就不能為那些沒(méi)有實(shí)現(xiàn)IComparable的類使用IList了,就算Sort方法實(shí)際上并沒(méi)有調(diào)用。

本文轉(zhuǎn)載自小新的技術(shù)天地的博客,

原文地址:http://wdxinren.cnblogs.com/archive/2005/05/29/164392.html

【編輯推薦】

  1. 詳解如何設(shè)置Linux下的C#開發(fā)環(huán)境
  2. 淺析C#與C++在靜態(tài)構(gòu)造函數(shù)上的異同
  3. 詳解C#中相等運(yùn)算符重載可能造成的陷阱
  4. 增強(qiáng)的XML?通過(guò)C# 4.0 dynamic享受Ruby寫法之探討
  5. 詳解C#泛型特性及相關(guān)實(shí)例

網(wǎng)頁(yè)名稱:不得不提的C#2.0泛型約束
網(wǎng)址分享:http://www.5511xx.com/article/cdpgdeh.html