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

C# 泛型應(yīng)用及優(yōu)點(diǎn)淺析

開(kāi)發(fā) 后端
C# 泛型應(yīng)用的好處是什么呢?類(lèi)型和內(nèi)部數(shù)據(jù)可以在不導(dǎo)致代碼膨脹的情況下更改,而不管您使用的是值類(lèi)型還是引用類(lèi)型。在本文中,我們將向你詳細(xì)介紹相關(guān)內(nèi)容。

C# 泛型應(yīng)用的好處是什么呢?.NET 中的泛型使您可以重用代碼以及在實(shí)現(xiàn)它時(shí)付出的努力。類(lèi)型和內(nèi)部數(shù)據(jù)可以在不導(dǎo)致代碼膨脹的情況下更改,而不管您使用的是值類(lèi)型還是引用類(lèi)型。您可以一次性地開(kāi)發(fā)、測(cè)試和部署代碼,通過(guò)任何類(lèi)型(包括將來(lái)的類(lèi)型)來(lái)重用它,并且全部具有編譯器支持和類(lèi)型安全。因?yàn)橐话愦a不會(huì)強(qiáng)行對(duì)值類(lèi)型進(jìn)行裝箱和取消裝箱,或者對(duì)引用類(lèi)型進(jìn)行向下強(qiáng)制類(lèi)型轉(zhuǎn)換,所以性能得到顯著提高。對(duì)于值類(lèi)型,性能通常會(huì)提高 200%;對(duì)于引用類(lèi)型,在訪(fǎng)問(wèn)該類(lèi)型時(shí),可以預(yù)期性能最多提高 100%(當(dāng)然,整個(gè)應(yīng)用程序的性能可能會(huì)提高,也可能不會(huì)提高)。本文隨附的源代碼包含一個(gè)微型基準(zhǔn)應(yīng)用程序,它在緊密循環(huán)中執(zhí)行堆棧。該應(yīng)用程序使您可以在基于 Object 的堆棧和一般堆棧上試驗(yàn)值類(lèi)型和引用類(lèi)型,以及更改循環(huán)迭代的次數(shù)以查看泛型對(duì)性能產(chǎn)生的影響。

C# 泛型應(yīng)用分析

因?yàn)?IL 和 CLR 為泛型提供本機(jī)支持,所以大多數(shù)符合 CLR 的語(yǔ)言都可以利用一般類(lèi)型。例如,下面這段 Visual Basic .NET 代碼使用代碼塊 2 的一般堆棧:

  1. Dim stack As Stack(Of Integer)  
  2. stack = new Stack(Of Integer)  
  3. stack.Push(3)  
  4. Dim number As Integer  
  5. number = stack.Pop() 

您可以在類(lèi)和結(jié)構(gòu)中使用泛型。以下是一個(gè)有用的一般點(diǎn)結(jié)構(gòu):

  1. public struct Point  
  2. {  
  3.      
  4.    public T X;  
  5.      
  6.    public T Y;  

可以使用該一般點(diǎn)來(lái)表示整數(shù)坐標(biāo),例如:

  1. Point point;  
  2. point.X = 1;  
  3. point.Y = 2; 

或者,可以使用它來(lái)表示要求浮點(diǎn)精度的圖表坐標(biāo):

  1. Point point;  
  2. point.X = 1.2;  
  3. point.Y = 3.4; 

除了到目前為止介紹的基本泛型語(yǔ)法以外,C# 2.0 還具有一些泛型特定的語(yǔ)法。例如,請(qǐng)考慮代碼塊 2 的 Pop() 方法。假設(shè)您不希望在堆棧為空時(shí)引發(fā)異常,而是希望返回堆棧中存儲(chǔ)的類(lèi)型的默認(rèn)值。如果您使用基于 Object 的堆棧,則可以簡(jiǎn)單地返回 null,但是您還可以通過(guò)值類(lèi)型來(lái)使用一般堆棧。為了解決該問(wèn)題,您可以使用 default() 運(yùn)算符,它返回類(lèi)型的默認(rèn)值。

下面說(shuō)明如何在 Pop() 方法的實(shí)現(xiàn)中使用默認(rèn)值:

  1. public T Pop()  
  2. {  
  3.    m_StackPointer--;  
  4.    if(m_StackPointer >= 0)  
  5.    {  
  6.       return m_Items[m_StackPointer];  
  7.    }  
  8.    else 
  9.    {  
  10.       m_StackPointer = 0;  
  11.       return default(T);  
  12.    }  

引用類(lèi)型的默認(rèn)值為 null,而值類(lèi)型(例如,整型、枚舉和結(jié)構(gòu))的默認(rèn)值為全零(用零填充相應(yīng)的結(jié)構(gòu))。因此,如果堆棧是用字符串構(gòu)建的,則 Pop() 方法在堆棧為空時(shí)返回 null;如果堆棧是用整數(shù)構(gòu)建的,則 Pop() 方法在堆棧為空時(shí)返回零。

C# 泛型應(yīng)用之多個(gè)一般類(lèi)型

單個(gè)類(lèi)型可以定義多個(gè)一般類(lèi)型參數(shù)。例如,請(qǐng)考慮代碼塊 3 中顯示的一般鏈表。

C# 泛型應(yīng)用代碼塊之一般鏈表

  1. class Node  
  2. {  
  3.    public K Key;  
  4.    public T Item;  
  5.    public Node NextNode;  
  6.    public Node()  
  7.    {  
  8.       Key      = default(K);  
  9.       Item     = defualt(T);  
  10.       NextNode = null;  
  11.    }  
  12.    public Node(K key,T item,Node nextNode)  
  13.    {  
  14.       Key      = key;  
  15.       Item     = item;  
  16.       NextNode = nextNode;  
  17.    }  
  18. }  
  19.  
  20. public class LinkedList  
  21. {  
  22.    Node m_Head;  
  23.    public LinkedList()  
  24.    {  
  25.       m_Head = new Node();  
  26.    }  
  27.    public void AddHead(K key,T item)  
  28.    {  
  29.       Node newNode = new Node(key,item,m_Head.NextNode);  
  30.       m_Head.NextNode = newNode;  
  31.    }  

該鏈表存儲(chǔ)節(jié)點(diǎn):

  1. class Node  
  2. {...} 

每個(gè)節(jié)點(diǎn)都包含一個(gè)鍵(屬于一般類(lèi)型參數(shù) K)和一個(gè)值(屬于一般類(lèi)型參數(shù) T)。每個(gè)節(jié)點(diǎn)還具有對(duì)該列表中下一個(gè)節(jié)點(diǎn)的引用。鏈表本身根據(jù)一般類(lèi)型參數(shù) K 和 T 進(jìn)行定義:

  1. public class LinkedList  
  2. {...} 

這使該列表可以公開(kāi)像 AddHead() 一樣的一般方法:

  1. public void AddHead(K key,T item); 

每當(dāng)您聲明使用泛型的類(lèi)型的變量時(shí),都必須指定要使用的類(lèi)型。但是,指定的類(lèi)型實(shí)參本身可以為一般類(lèi)型參數(shù)。例如,該鏈表具有一個(gè)名為 m_Head 的 Node 類(lèi)型的成員變量,用于引用該列表中的第一個(gè)項(xiàng)。m_Head 是使用該列表自己的一般類(lèi)型參數(shù) K 和 T 聲明的。

  1. Node m_Head; 

您需要在實(shí)例化節(jié)點(diǎn)時(shí)提供類(lèi)型實(shí)參;同樣,您可以使用該鏈表自己的一般類(lèi)型參數(shù):

  1. public void AddHead(K key,T item)  
  2. {  
  3.    Node newNode = new Node<K,T>(key,item,m_Head.NextNode);  
  4.    m_Head.NextNode = newNode;  

請(qǐng)注意,該列表使用與節(jié)點(diǎn)相同的名稱(chēng)來(lái)表示一般類(lèi)型參數(shù)完全是為了提高可讀性;它也可以使用其他名稱(chēng),例如:

  1. public class LinkedList  
  2. {...} 

或:

  1. public class LinkedList  
  2. {...} 

在這種情況下,將 m_Head 聲明為:

  1. Node m_Head; 

當(dāng)客戶(hù)端使用該鏈表時(shí),該客戶(hù)端必須提供類(lèi)型實(shí)參。該客戶(hù)端可以選擇整數(shù)作為鍵,并且選擇字符串作為數(shù)據(jù)項(xiàng):

  1. LinkedList list = new LinkedList();  
  2. list.AddHead(123,"AAA"); 

但是,該客戶(hù)端可以選擇其他任何組合(例如,時(shí)間戳)來(lái)表示鍵:

  1. LinkedList list = new LinkedList();  
  2. list.AddHead(DateTime.Now,"AAA");    

有時(shí),為特定類(lèi)型的特殊組合起別名是有用的。可以通過(guò) using 語(yǔ)句完成該操作,如代碼塊 4 中所示。請(qǐng)注意,別名的作用范圍是文件的作用范圍,因此您必須按照與使用 using 命名空間相同的方式,在項(xiàng)目文件中反復(fù)起別名。

C# 泛型應(yīng)用代碼塊之 一般類(lèi)型別名

  1. using List = LinkedList;  
  2.  
  3. class ListClient  
  4. {  
  5.    static void Main(string[] args)  
  6.    {  
  7.       List list = new List();  
  8.       list.AddHead(123,"AAA");  
  9.    }  

C# 泛型應(yīng)用及C# 泛型應(yīng)用的優(yōu)點(diǎn)就向你介紹到這里,希望對(duì)你了解和學(xué)習(xí)C# 泛型應(yīng)用有所幫助。

【編輯推薦】

  1. C#網(wǎng)絡(luò)編程客戶(hù)端程序設(shè)計(jì)淺析
  2. C#網(wǎng)絡(luò)編程客戶(hù)端程序?qū)崿F(xiàn)源碼淺析
  3. 淺析C# 泛型處理的問(wèn)題空間
  4. C# 泛型概念的初步理解
  5. C# 泛型實(shí)現(xiàn)理解及實(shí)例淺析
責(zé)任編輯:仲衡 來(lái)源: MSDN
相關(guān)推薦

2009-08-24 15:12:13

C# 泛型接口

2009-08-24 17:58:19

C# 泛型集合

2009-08-24 17:27:05

C#泛型應(yīng)用

2009-08-24 16:39:19

C# 泛型應(yīng)用

2009-08-24 10:37:27

C# 泛型

2009-08-24 17:39:21

C# 泛型集合

2009-08-24 14:43:35

C# 泛型

2009-08-24 14:51:25

C# 泛型泛型類(lèi)型

2009-08-24 18:15:24

C# Dictiona

2009-08-17 17:36:08

C# 枚舉

2009-08-24 15:50:23

C# 泛型C# 泛型委托

2009-08-24 14:20:13

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

2009-08-24 10:07:57

C#泛型處理

2009-08-24 14:26:42

C# 泛型類(lèi)

2009-08-24 13:31:38

C# 泛型約束

2009-08-24 15:28:19

C# 泛型方法

2009-08-24 16:01:44

C# 泛型

2009-08-24 16:19:42

C# 泛型方法

2009-08-24 13:41:23

C# 泛型約束

2009-12-24 09:16:11

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

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

主站蜘蛛池模板: 欧美精品一区在线 | 欧美色综合网 | 丝袜美腿一区二区三区动态图 | 中文字幕一级 | 日韩午夜在线观看 | 午夜爱爱毛片xxxx视频免费看 | 成人网视频 | 免费av在线网站 | 亚洲免费在线视频 | 男人亚洲天堂 | av男人的天堂在线 | 一区| 欧美日韩成人一区二区 | 在线观看视频91 | 亚洲精品第一 | 国产精品久久国产精品 | 欧美国产日韩一区二区三区 | 日韩一区二区视频 | 日本久久黄色 | 区一区二区三在线观看 | 一区二区精品视频 | 欧美激情黄色 | a视频在线观看 | 国产91久久精品一区二区 | www.色综合| 成人午夜精品 | 中文字幕高清 | 精品久久久久久久久久久久 | 成人高清在线视频 | 成人超碰| 欧美一区二区免费在线 | 久久一区二区三区四区 | 久久三区 | 欧美日韩大片 | 99精品免费 | 亚洲国产精品一区在线观看 | 亚洲福利网站 | 欧美人妇做爰xxxⅹ性高电影 | 一区二区成人 | 精品久久精品 | 自拍视频在线观看 |