成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

不得不提的C#2.0泛型約束

開發 后端
泛型約束的引入讓程序員在操作C#類型時更加的規范和準確,為了提供強編譯時檢查和減少類型轉換,C#2.0泛型引入了約束(Constraints)這個概念,這是一個泛型的可選項。

C#泛型是.NET中最常見的一種特性,接下來我們就來了解關于C#泛型的一些特性,看一下代碼:

  1. public class Dictionary<K,V> 
  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等方法。代碼在編譯時就出錯了,因為key可能不含有CompareTo方法。那么如何解決呢?一種容易想到的辦法就是把key轉換成IComparable,那么代碼就變成了這樣:

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

這次沒有編譯時錯誤了。但是還是要小心,因為實際使用時,如果你使用了一個沒有實現IComparable的類型作參數,就會出現InvalidCastException異常。為了提供強編譯時檢查和減少類型轉換,C#2.0泛型引入了約束(Constraints)這個概念,這是一個泛型的可選項。語法是使用where關鍵字指明約束的類型參數,然后加冒號,再加上類,接口,類型參數等。我們把代碼變成了這樣:

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

這樣就保證了任何為K類型參數提供的類型都實現了IComparable接口。所以我們的key就可以使用CompareTo方法了。如果我們在使用時提供了沒有實現IComparable接口的類型,就會出現編譯時錯誤,我們的約束可以不止是一個接口,可以是多個,還可以是跟類或其他約束混合,請看下面代碼:

  1. public class EntityTable<K,E> 
  2.     where K: IComparable<K>, 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.     }  

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

類型參數必須小心地使用。雖然它提供了更強編譯時類型檢查,但是卻也約束了泛型類型的一些可能的使用情況。比如說,有一個泛型類List<T>約束T實現IComparable接口,這樣就可以在List<T>的Sort方法中比較項了。然而,就不能為那些沒有實現IComparable的類使用IList<T>了,就算Sort方法實際上并沒有調用。

本文轉載自小新的技術天地的博客,

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

【編輯推薦】

  1. 詳解如何設置Linux下的C#開發環境
  2. 淺析C#與C++在靜態構造函數上的異同
  3. 詳解C#中相等運算符重載可能造成的陷阱
  4. 增強的XML?通過C# 4.0 dynamic享受Ruby寫法之探討
  5. 詳解C#泛型特性及相關實例
責任編輯:王曉東 來源: 博客園
相關推薦

2016-09-27 23:47:42

2016-12-06 16:24:36

微軟量子計算

2009-11-11 16:48:29

Visual C++

2017-11-21 09:01:59

Java編程技術

2010-11-02 14:51:11

職場

2024-03-20 17:16:09

人形機器人黃仁勛3D

2020-06-15 08:19:00

ZooKeeperEureka

2011-03-31 10:46:54

LinuxCLI軟件

2019-11-14 15:38:46

AndroidRelease項目

2020-07-09 12:50:29

JVM內存管理Java

2019-12-24 14:04:59

PythonExcel數據處理

2021-04-12 08:56:00

多線程Future模式

2019-10-18 17:55:03

安全運營

2010-05-10 13:01:03

OracleDBA面試

2010-05-21 09:40:57

MySQL出錯代碼列表

2010-05-25 09:58:43

MySQL數據庫

2010-05-26 15:58:52

MySQL遠程連接

2009-08-24 13:31:38

C# 泛型約束

2009-08-24 13:41:23

C# 泛型約束

2018-05-23 10:04:24

MySQL查詢優化
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 日韩一区二区三区在线视频 | 人成在线视频 | 久久激情五月丁香伊人 | 不卡av在线 | 小h片免费观看久久久久 | 久久乐国产精品 | 日韩欧美三区 | 91精品国产一区二区三区 | 亚洲第一色站 | 欧美男人天堂 | 日韩精品在线观看网站 | 日韩高清电影 | 午夜免费观看网站 | 91久久久久久久久久久 | 国产精品99久久久久久动医院 | 中文字幕 亚洲一区 | 免费观看日韩av | 色综合国产| 国产精品日产欧美久久久久 | 欧洲一区二区三区 | 国产一区二区三区久久久久久久久 | 久草中文在线观看 | 欧美中文字幕一区二区三区亚洲 | 欧美精品一区二区在线观看 | 欧美色性 | 99视频免费 | 亚洲色图婷婷 | 2018国产精品 | 欧美在线视频观看 | 久久精品国产一区二区 | 日韩精品一区二区三区在线播放 | 精品久久久久久亚洲精品 | 老熟女毛片 | 蜜桃精品噜噜噜成人av | 久久久无码精品亚洲日韩按摩 | 欧美视频一区二区三区 | 最新一级毛片 | 国产精品中文字幕在线 | 91影院在线观看 | 视频第一区 | 色婷婷亚洲一区二区三区 |