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

C#泛型應(yīng)用心得淺析

開發(fā) 后端
C#泛型應(yīng)用心得主要向你介紹了在實(shí)際開發(fā)中我們遇到的C#泛型應(yīng)用的心得,希望對你了解和學(xué)習(xí)C#泛型有所幫助。

我們在編寫C#程序的時候,經(jīng)常遇到兩個模塊的功能非常相似,只是一個是處理int類型,另一個是處理string類型,或者是其他自定義的數(shù)據(jù)類型,但我們沒有其他的解決方案,只能各自寫多個方法處理每個數(shù)據(jù)類型,因?yàn)榉椒ǖ膮?shù)類型不同。那么是否有一個辦法,在方法中傳入通用的數(shù)據(jù)類型,這樣就可以合并代碼了。C#泛型應(yīng)用正是為解決這個問題的。C#泛型應(yīng)用可以解決什么樣的問題呢?我們先看下面的代碼,代碼中省略了一些內(nèi)容,但功能是實(shí)現(xiàn)一個棧,這個棧只能處理int數(shù)據(jù)類型:

  1. public class Stack  
  2. {  
  3.    private int[] m_item;  
  4.    public int pop() {}  
  5.    public void push(int item) {}  
  6.    public Stack(int i) {this.m_item = new int[i]; }  

上面的代碼運(yùn)行得很好,但是,如果我們需要一個棧來保存string類型的數(shù)據(jù)時呢?或許很多人都會想到把上面的代碼copy一份,把int改成string就可以了。當(dāng)然,這樣做,是沒問題的,但是如果以后需要long,Node類型的棧該怎么辦?繼續(xù)復(fù)制?這里有種折衷的辦法,是使用一個通用的數(shù)據(jù)類型object來實(shí)現(xiàn)這個棧:

  1. public class Stack  
  2. {  
  3.    private object[] m_item;  
  4.    public object pop() {}  
  5.    public void push() {}  
  6.  
  7.    public Stack(int o){this.m_item = new object [o]}  
  8. }  

雖然這個棧很靈活,可以接收任何數(shù)據(jù)類型。但全面地說,也不是沒有缺陷的,主要表現(xiàn)在:

◆當(dāng)Stack處理值類型時,會出現(xiàn)裝箱,拆箱操作,這將在托管堆上分配和回收大量的變量,若數(shù)據(jù)量大,則性能損失非常嚴(yán)重。

◆在處理引用類型時,雖然沒有裝箱和拆箱操作,但將用到數(shù)據(jù)類型的強(qiáng)制轉(zhuǎn)換操作,增加了處理器的負(fù)擔(dān)。

在數(shù)據(jù)類型的強(qiáng)制轉(zhuǎn)換上還有更嚴(yán)重的問題,如下:

  1. Node1 x = new Node1();  
  2. stack.push(x);  
  3. Node2 y = (Node2)stack.pop(); 

上面的代碼在編譯時是沒有問題的,但是由于push了一個Node1類型的數(shù)據(jù),但在pop時卻要求轉(zhuǎn)換為Node2類型,這將出現(xiàn)程序運(yùn)行時的類型轉(zhuǎn)換異常,但卻逃離了編譯器的檢查。
針對object類型棧的問題,我們引入泛型,他可以很優(yōu)雅地解決這些問題。泛型用一個通過的數(shù)據(jù)類型T來代替object,在類實(shí)例化時指定T的類型,運(yùn)行時(Runtime)自動編譯為本地代碼,運(yùn)行效率和代碼質(zhì)量都有很大的提高,并且保證數(shù)據(jù)類型安全。

C# 泛型應(yīng)用實(shí)例:

下面是使用泛型來重寫上面的棧,用一個通用的數(shù)據(jù)類型T來作為一個占位符,等待在實(shí)例化時用一個實(shí)際的類型來替換。如下:

  1. public class Stack﹤T﹥  
  2. {  
  3.    private T[] m_item;  
  4.    public T pop() {}  
  5.    public void push(T item) {}  
  6.  
  7.    public Stack(int i)  
  8.    {  
  9.     this.m_item = new T[i];  
  10.    }  
  11. }  

類的寫法不變,只是引入了通用數(shù)據(jù)類型T就可以適用于任何數(shù)據(jù)類型,并且類型安全的。這個類的調(diào)用方法:

  1. Stack﹤int﹥ a = new Stack﹤int﹥(100);  
  2. a.push(10);  
  3. a.push("10"); //這里編譯不通過,因?yàn)轭恆只接收int類型的數(shù)據(jù)  
  4. int x = a.pop();  
  5.  
  6. Stack﹤string﹥ b = new Stack﹤string﹥(100);  
  7. b.push(10); //這里編譯不通過,因?yàn)轭恇只接收string類型的數(shù)據(jù)庫  
  8. b.push("10");  
  9. string y = b.pop();  

這個類和object實(shí)現(xiàn)的類有截然不同的區(qū)別:

1. 他是類型安全的。實(shí)例化了int類型的棧,就不能處理string類型的數(shù)據(jù),其他數(shù)據(jù)類型也一樣;

2. 無需裝箱和拆箱。這個類在實(shí)例化時,按照鎖傳入的數(shù)據(jù)類型生成本地代碼,本地代碼數(shù)據(jù)類型已確定,所以無需裝箱和拆箱。

3. 無需數(shù)據(jù)類型轉(zhuǎn)換。

C# 泛型應(yīng)用心得的一些總結(jié)就向你介紹到這里,希望對你了解和學(xué)習(xí)C# 泛型有所幫助。

【編輯推薦】

  1. 淺析運(yùn)行庫中的C# 泛型
  2. C# 泛型方法中反射常用方法淺析
  3. C# 泛型應(yīng)用中屬性淺析
  4. C#泛型操作數(shù)據(jù)庫切換實(shí)踐
  5. C# 泛型基礎(chǔ)知識學(xué)習(xí)大全
責(zé)任編輯:仲衡 來源: 百度空間
相關(guān)推薦

2009-08-24 15:12:13

C# 泛型接口

2009-08-24 17:58:19

C# 泛型集合

2009-08-24 16:39:19

C# 泛型應(yīng)用

2009-08-24 11:35:20

C# 泛型應(yīng)用

2009-08-24 17:39:21

C# 泛型集合

2009-08-31 10:00:07

C#靜態(tài)變量

2009-08-24 18:15:24

C# Dictiona

2009-08-24 14:51:25

C# 泛型泛型類型

2009-08-24 15:50:23

C# 泛型C# 泛型委托

2009-08-24 14:20:13

C# 強(qiáng)制類型轉(zhuǎn)換

2009-08-24 14:26:42

C# 泛型類

2009-08-24 13:31:38

C# 泛型約束

2009-08-24 10:37:27

C# 泛型

2009-08-24 15:28:19

C# 泛型方法

2009-08-24 10:07:57

C#泛型處理

2009-08-24 16:19:42

C# 泛型方法

2009-08-24 16:01:44

C# 泛型

2009-08-28 10:08:15

C# using語句

2009-08-24 13:41:23

C# 泛型約束

2009-08-25 13:57:09

C#泛型集合類型
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 亚洲欧洲成人 | 欧美成人影院 | 欧美日韩在线视频一区 | 欧美日韩电影免费观看 | 亚洲情视频 | 国产a区 | 久久精品91久久久久久再现 | 一级视频黄色 | 日本午夜一区二区三区 | 污免费网站 | 欧美黄色片在线观看 | 亚洲成人精选 | 男女一区二区三区 | 亚洲精品久久视频 | 天天操天天拍 | 狠狠做六月爱婷婷综合aⅴ 国产精品视频网 | 一区二区三区亚洲精品国 | 91精品国产色综合久久不卡蜜臀 | av中文字幕在线播放 | 亚洲欧美激情国产综合久久久 | 成人免费一区二区 | 日韩欧美一区二区三区免费看 | 日韩欧美综合在线视频 | av免费在线观看网站 | 亚洲国产18 | 日韩一区二区福利视频 | 福利视频网站 | 欧美一区二区三区的 | 亚洲国产一区二区三区在线观看 | 亚洲视频在线免费观看 | 91精品国产综合久久久久久丝袜 | 97国产精品 | 正在播放国产精品 | 密色视频 | 黄网站免费入口 | 蜜桃av一区二区三区 | 视频一二区 | 午夜爽爽爽男女免费观看 | 精品一区二区三区在线观看国产 | 成人免费视频播放 | 国产精品久久久久久久久久 |