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

VB.NET泛型類型基本概念詳解

開發 后端
VB.NET泛型類型的應用,可以使用一個或多個數據類型將它進行參數化。具體的操作方法將會在這篇文章中詳細給出。

VB.NET編程語言中的數據類型種類繁多,初學者要想全部掌握這些類型的應用是一個比較困難的步驟。今天我們先讓大家了解一下VB.NET泛型類型這一高階技術的應用,以便讓大家對這一語言進行深入的解讀。#t#

“泛型類型”是可適應對多種數據類型執行相同功能的單個編程元素。定義泛型類或過程時,無需為可能需要對其執行該功能的每個數據類型定義單獨版本。

就好比是帶有可拆卸刀頭的螺絲刀。您檢查需要擰動的螺絲,然后選擇適合該螺絲的刀頭(一字、十字、星形)。將正確的刀頭插入到螺絲刀柄上后,您就可以使用螺絲刀執行完全相同的功能,即擰螺絲。

定義VB.NET泛型類型時,即使用一個或多個數據類型將其參數化。這樣可允許使用代碼定制數據類型以滿足其要求。代碼可以通過泛型元素聲明若干個不同的編程元素,每個元素可使用一組不同的數據類型。但是,無論聲明的元素使用哪些數據類型,它們均執行相同的邏輯。

例如,您可能想創建并使用一個處理特定數據類型(如 String)的隊列類。可以通過 System.Collections.Generic.Queue 聲明一個如下例所示的類。

  1. Visual Basic  
  2. Public stringQ As New System.
    Collections.Generic.Queue(Of String) 

現在,可以使用 stringQ 來專門處理 String 值。由于 stringQ 專用于 String 而未針對 Object 值進行泛型化,因此,不會有后期綁定或類型轉換。這就節省了執行時間并減少了運行時錯誤。

有關使用VB.NET泛型類型的更多信息,請參見如何:使用泛型類。

泛型類的示例

下面的示例演示泛型類的主干定義。

  1. Visual Basic  
  2. Public Class classHolder(Of t)  
  3. Public Sub processNewItem(ByVal newItem As t)  
  4. Dim tempItem As t  
  5. ' Insert code that processes an item of data type t.  
  6. End Sub  
  7. End Class 

在上面的主干中,t 是一個類型參數,也即您在聲明此類時提供的數據類型的占位符。在代碼中的其他地方,可以通過為 t 提供不同的數據類型來聲明不同版本的 classHolder。下面的示例演示兩個此類聲明。

  1. Visual Basic  
  2. Public integerClass As New classHolder(Of Integer)  
  3. Friend stringClass As New classHolder(Of String) 

上面的語句聲明了構造類,在這些類中,特定的類型替換了類型參數。此類替換會傳播到構造類中的代碼內。下面的示例顯示了 processNewItem 過程在 integerClass 中的形式。

  1. Visual Basic  
  2. Public Sub processNewItem(ByVal newItem As Integer)  
  3. Dim tempItem As Integer  
  4. ' Inserted code now processes an Integer item.  
  5. End Sub 

有關更完整的示例,請參見如何:定義可對不同數據類型提供相同功能的類。

合格的編程元素

可以定義并使用泛型類、結構、接口、過程和委托。請注意,.NET Framework 定義了幾個代表常用泛型元素的泛型類、結構和接口。System.Collections.Generic 命名空間提供字典、列表、隊列和堆棧。在定義自己的泛型元素之前,請查看 System.Collections.Generic 中是否已提供了此元素。

過程不是類型,但可以定義并使用泛型過程。請參見 Visual Basic 中的泛型過程。

VB.NET泛型類型的優點

泛型類型用作聲明幾個不同編程元素的基礎,而每個元素均處理特定的數據類型。泛型類型的替代項有:

對 Object 數據類型進行處理的單一類型。

一組特定于類型的類型版本,每個版本單獨進行編碼并處理一種特定的數據類型,如 String、Integer 或用戶定義的類型(如 customer)。

與上述替代項相比,泛型類型具有以下優點:

類型安全。泛型類型強制實施編譯時類型檢查。而基于 Object 的類型可接受任何數據類型,因此,您必須編寫代碼以檢查是否可接受某種輸入數據類型。利用泛型類型,編譯器可以在運行時之前捕獲類型不匹配錯誤。

性能。泛型類型無需對數據進行裝箱和取消裝箱操作,原因是每種泛型類型均專用于一種數據類型。而基于 Object 的操作必須將輸入數據類型進行裝箱操作,以將它們轉換為 Object,而且還要將預定輸出的數據進行取消裝箱操作。裝箱和取消裝箱操作會降低性能。

此外,還要對基于 Object 的類型進行后期綁定,這意味著需要編寫額外的代碼才能在運行時訪問它們的成員。這同樣會降低性能。

代碼合并。只需定義VB.NET泛型類型中的代碼一次。而一組特定于類型的類型版本必須在每個版本中復制相同的代碼,代碼中唯一的不同就是特定于該版本的數據類型。利用泛型類型,特定于類型的版本全都利用原始的泛型類型生成。

代碼重用。對于不依賴特定數據類型的泛型代碼,可以利用不同的數據類型重用它。可以經常重用此類代碼(甚至利用最初未預料到的數據類型來重用它)。

IDE 支持。在使用通過泛型類型聲明的構造類型時,集成開發環境 (IDE) 可以在您開發代碼時給予更多的支持。例如,IntelliSense™ 可以顯示適用于構造函數或方法的某個參數的特定于類型的選項。

泛型算法。獨立于類型的抽象算法非常適用于泛型類型。例如,可以將使用 IComparable 接口對項進行排序的泛型過程用于任何實現 IComparable 的數據類型。

約束

雖然VB.NET泛型類型定義中的代碼應盡可能獨立于類型,但您可能必須要求向泛型類型提供任何數據類型的某項功能。例如,如果出于排序或對照的目的而想比較兩個項,則它們的數據類型必須實現 IComparable 接口。可通過向類型參數添加約束來強制實施此要求。

約束的示例

下面的示例演示帶有約束(要求類型參數實現 IComparable)的類的主干定義。

  1. Visual Basic  
  2. Public Class itemManager(Of t As IComparable)  
  3. ' Insert code that defines class members.  
  4. End Class 

如果后續代碼嘗試從提供未實現 IComparable 的類型的 itemManager 中構造一個類,則編譯器會引發錯誤。

約束的類型

約束可以按任意組合指定下列要求:

類型參數必須實現一個或多個接口

類型參數至多只能是一個類的類型,或至多只能從一個類繼承

對于通過類型參數創建對象的代碼,類型參數必須公開一個可供其訪問的無參數構造函數

類型參數必須是引用類型或值類型

如果需要強制實施多個要求,則可以使用以逗號分隔的約束列表(括在大括號 ({ }) 中)。若要求可訪問的構造函數,請在此列表中加入 New (Visual Basic) 關鍵字。若要求引用類型,請加入 Class (Visual Basic) 關鍵字;若要求值類型,請加入 Structure (Visual Basic) 關鍵字。

多個約束的示例

下面的示例演示帶有類型參數約束列表的泛型類的主干定義。在創建此類的實例的代碼中,類型參數必須實現 IComparable 和 IDisposable 接口,必須是引用類型,并且必須公開一個可訪問的無參數構造函數。

  1. Visual Basic  
  2. Public Class thisClass(Of t As {IComparable, IDisposable, Class, New})  
  3. ' Insert code that defines class members.  
  4. End Class 

重要術語

VB.NET泛型類型引入并使用了以下術語:

泛型類型。類、結構、接口、過程或委托的定義,在聲明它們時要為它們提供至少一種數據類型。

類型參數。在泛型類型定義中,您在聲明數據類型時為其提供的占位符。

類型變量。特定的數據類型,用于在您通過泛型類型聲明構造類型時替換類型參數。

約束。有關類型參數的條件,限制了可以為類型參數提供的類型變量。約束可以要求類型參數必須實現特定的接口,必須是特定的類或繼承自特定的類,必須具有可訪問的無參數構造函數,或者必須是引用類型或值類型。可以組合這些約束,但至多只能指定一個類。

構造類型。通過為泛型類型的類型參數提供類型變量,從VB.NET泛型類型中聲明的類、結構、接口、過程或委托。

責任編輯:曹凱 來源: wewill.cn
相關推薦

2010-01-12 17:21:29

VB.NET對象

2010-01-18 19:29:31

VB.NET多維數組

2010-01-21 15:47:41

VB.NET變量生存周VB.net

2010-01-19 15:42:30

VB.NET賦值語句

2010-01-15 13:30:50

VB.NET Prog

2010-01-13 16:26:57

VB.NET通知控件

2010-01-19 13:06:24

VB.NET數據集

2010-01-21 10:57:12

VB.NET局部變量類

2010-01-20 10:19:16

VB.NET動態接口

2010-01-13 16:34:57

VB.NET動態屬性

2010-01-19 10:12:39

VB.NET Butt

2010-01-21 10:48:18

VB.NET擴展方法

2010-01-13 10:15:19

VB.NET Stri

2010-01-08 14:56:18

VB.NET類定義

2010-01-12 18:05:38

VB.NET對象

2010-01-14 14:21:07

2010-01-13 18:17:00

VB.NET通信程序

2010-01-12 18:28:28

VB.NET共享變量

2010-01-07 11:28:44

VB.NET Hash

2010-01-07 14:52:41

VB.NET運算符
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美成人激情 | 粉嫩一区二区三区四区公司1 | 羞羞视频免费观 | 欧美三级视频在线观看 | 国产一区高清 | 亚洲精品在线免费 | 超碰人人爱 | 福利视频网站 | 中文字字幕一区二区三区四区五区 | 久久国产精彩视频 | 国产蜜臀97一区二区三区 | 国产98色在线 | 日韩 | 一区二区日本 | 国产玖玖 | 99精品视频在线 | 精品久久久久久亚洲国产800 | 久久久精品网站 | 国产美女在线观看 | 黄色网址在线免费观看 | 国产精品2 | 伊人欧美视频 | 亚洲高清免费 | 久日精品| 国产一区二区在线免费播放 | 国产91精品久久久久久久网曝门 | 国产免费看 | 在线免费观看毛片 | 曰韩一二三区 | 三级成人在线 | 精品九九久久 | 91网站在线看 | 日韩一区二区三区在线 | 日韩精品视频在线 | 在线视频中文字幕 | 亚洲成人免费视频在线 | www.中文字幕.com | 9191成人精品久久 | 成人网在线 | 精品国产乱码久久久久久蜜柚 | 久久久久成人精品免费播放动漫 | 最新av在线播放 |