日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

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

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
VB.NET泛型類型基本概念詳解

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

成都創(chuàng)新互聯(lián)公司主要從事網(wǎng)站設(shè)計(jì)制作、網(wǎng)站制作、網(wǎng)頁(yè)設(shè)計(jì)、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)屏山,十載網(wǎng)站建設(shè)經(jīng)驗(yàn),價(jià)格優(yōu)惠、服務(wù)專業(yè),歡迎來(lái)電咨詢建站服務(wù):13518219792

“泛型類型”是可適應(yīng)對(duì)多種數(shù)據(jù)類型執(zhí)行相同功能的單個(gè)編程元素。定義泛型類或過(guò)程時(shí),無(wú)需為可能需要對(duì)其執(zhí)行該功能的每個(gè)數(shù)據(jù)類型定義單獨(dú)版本。

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

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

例如,您可能想創(chuàng)建并使用一個(gè)處理特定數(shù)據(jù)類型(如 String)的隊(duì)列類??梢酝ㄟ^(guò) System.Collections.Generic.Queue 聲明一個(gè)如下例所示的類。

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

現(xiàn)在,可以使用 stringQ 來(lái)專門處理 String 值。由于 stringQ 專用于 String 而未針對(duì) Object 值進(jìn)行泛型化,因此,不會(huì)有后期綁定或類型轉(zhuǎn)換。這就節(jié)省了執(zhí)行時(shí)間并減少了運(yùn)行時(shí)錯(cuò)誤。

有關(guān)使用VB.NET泛型類型的更多信息,請(qǐng)參見(jiàn)如何:使用泛型類。

泛型類的示例

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

 
 
 
  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 是一個(gè)類型參數(shù),也即您在聲明此類時(shí)提供的數(shù)據(jù)類型的占位符。在代碼中的其他地方,可以通過(guò)為 t 提供不同的數(shù)據(jù)類型來(lái)聲明不同版本的 classHolder。下面的示例演示兩個(gè)此類聲明。

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

上面的語(yǔ)句聲明了構(gòu)造類,在這些類中,特定的類型替換了類型參數(shù)。此類替換會(huì)傳播到構(gòu)造類中的代碼內(nèi)。下面的示例顯示了 processNewItem 過(guò)程在 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 

有關(guān)更完整的示例,請(qǐng)參見(jiàn)如何:定義可對(duì)不同數(shù)據(jù)類型提供相同功能的類。

合格的編程元素

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

過(guò)程不是類型,但可以定義并使用泛型過(guò)程。請(qǐng)參見(jiàn) Visual Basic 中的泛型過(guò)程。

VB.NET泛型類型的優(yōu)點(diǎn)

泛型類型用作聲明幾個(gè)不同編程元素的基礎(chǔ),而每個(gè)元素均處理特定的數(shù)據(jù)類型。泛型類型的替代項(xiàng)有:

對(duì) Object 數(shù)據(jù)類型進(jìn)行處理的單一類型。

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

與上述替代項(xiàng)相比,泛型類型具有以下優(yōu)點(diǎn):

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

性能。泛型類型無(wú)需對(duì)數(shù)據(jù)進(jìn)行裝箱和取消裝箱操作,原因是每種泛型類型均專用于一種數(shù)據(jù)類型。而基于 Object 的操作必須將輸入數(shù)據(jù)類型進(jìn)行裝箱操作,以將它們轉(zhuǎn)換為 Object,而且還要將預(yù)定輸出的數(shù)據(jù)進(jìn)行取消裝箱操作。裝箱和取消裝箱操作會(huì)降低性能。

此外,還要對(duì)基于 Object 的類型進(jìn)行后期綁定,這意味著需要編寫額外的代碼才能在運(yùn)行時(shí)訪問(wèn)它們的成員。這同樣會(huì)降低性能。

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

代碼重用。對(duì)于不依賴特定數(shù)據(jù)類型的泛型代碼,可以利用不同的數(shù)據(jù)類型重用它??梢越?jīng)常重用此類代碼(甚至利用最初未預(yù)料到的數(shù)據(jù)類型來(lái)重用它)。

IDE 支持。在使用通過(guò)泛型類型聲明的構(gòu)造類型時(shí),集成開(kāi)發(fā)環(huán)境 (IDE) 可以在您開(kāi)發(fā)代碼時(shí)給予更多的支持。例如,IntelliSense? 可以顯示適用于構(gòu)造函數(shù)或方法的某個(gè)參數(shù)的特定于類型的選項(xiàng)。

泛型算法。獨(dú)立于類型的抽象算法非常適用于泛型類型。例如,可以將使用 IComparable 接口對(duì)項(xiàng)進(jìn)行排序的泛型過(guò)程用于任何實(shí)現(xiàn) IComparable 的數(shù)據(jù)類型。

約束

雖然VB.NET泛型類型定義中的代碼應(yīng)盡可能獨(dú)立于類型,但您可能必須要求向泛型類型提供任何數(shù)據(jù)類型的某項(xiàng)功能。例如,如果出于排序或?qū)φ盏哪康亩氡容^兩個(gè)項(xiàng),則它們的數(shù)據(jù)類型必須實(shí)現(xiàn) IComparable 接口。可通過(guò)向類型參數(shù)添加約束來(lái)強(qiáng)制實(shí)施此要求。

約束的示例

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

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

如果后續(xù)代碼嘗試從提供未實(shí)現(xiàn) IComparable 的類型的 itemManager 中構(gòu)造一個(gè)類,則編譯器會(huì)引發(fā)錯(cuò)誤。

約束的類型

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

類型參數(shù)必須實(shí)現(xiàn)一個(gè)或多個(gè)接口

類型參數(shù)至多只能是一個(gè)類的類型,或至多只能從一個(gè)類繼承

對(duì)于通過(guò)類型參數(shù)創(chuàng)建對(duì)象的代碼,類型參數(shù)必須公開(kāi)一個(gè)可供其訪問(wèn)的無(wú)參數(shù)構(gòu)造函數(shù)

類型參數(shù)必須是引用類型或值類型

如果需要強(qiáng)制實(shí)施多個(gè)要求,則可以使用以逗號(hào)分隔的約束列表(括在大括號(hào) ({ }) 中)。若要求可訪問(wèn)的構(gòu)造函數(shù),請(qǐng)?jiān)诖肆斜碇屑尤?New (Visual Basic) 關(guān)鍵字。若要求引用類型,請(qǐng)加入 Class (Visual Basic) 關(guān)鍵字;若要求值類型,請(qǐng)加入 Structure (Visual Basic) 關(guān)鍵字。

多個(gè)約束的示例

下面的示例演示帶有類型參數(shù)約束列表的泛型類的主干定義。在創(chuàng)建此類的實(shí)例的代碼中,類型參數(shù)必須實(shí)現(xiàn) IComparable 和 IDisposable 接口,必須是引用類型,并且必須公開(kāi)一個(gè)可訪問(wèn)的無(wú)參數(shù)構(gòu)造函數(shù)。

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

重要術(shù)語(yǔ)

VB.NET泛型類型引入并使用了以下術(shù)語(yǔ):

泛型類型。類、結(jié)構(gòu)、接口、過(guò)程或委托的定義,在聲明它們時(shí)要為它們提供至少一種數(shù)據(jù)類型。

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

類型變量。特定的數(shù)據(jù)類型,用于在您通過(guò)泛型類型聲明構(gòu)造類型時(shí)替換類型參數(shù)。

約束。有關(guān)類型參數(shù)的條件,限制了可以為類型參數(shù)提供的類型變量。約束可以要求類型參數(shù)必須實(shí)現(xiàn)特定的接口,必須是特定的類或繼承自特定的類,必須具有可訪問(wèn)的無(wú)參數(shù)構(gòu)造函數(shù),或者必須是引用類型或值類型。可以組合這些約束,但至多只能指定一個(gè)類。

構(gòu)造類型。通過(guò)為泛型類型的類型參數(shù)提供類型變量,從VB.NET泛型類型中聲明的類、結(jié)構(gòu)、接口、過(guò)程或委托。


本文題目:VB.NET泛型類型基本概念詳解
當(dāng)前鏈接:http://www.dlmjj.cn/article/dhciigd.html