最近2018中文字幕在日韩欧美国产成人片_国产日韩精品一区二区在线_在线观看成年美女黄网色视频_国产精品一区三区五区_国产精彩刺激乱对白_看黄色黄大色黄片免费_人人超碰自拍cao_国产高清av在线_亚洲精品电影av_日韩美女尤物视频网站

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

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
vb.net接口繼承 接口繼承接口用什么關(guān)鍵字

接口的VB.NET( 一款行業(yè)軟件)接口

在VB.NET的類里,實(shí)現(xiàn)一個(gè)接口的語句是:

為馬龍等地區(qū)用戶提供了全套網(wǎng)頁設(shè)計(jì)制作服務(wù),及馬龍網(wǎng)站建設(shè)行業(yè)解決方案。主營(yíng)業(yè)務(wù)為網(wǎng)站設(shè)計(jì)、成都網(wǎng)站制作、馬龍網(wǎng)站設(shè)計(jì),以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠(chéng)的服務(wù)。我們深信只要達(dá)到每一位用戶的要求,就會(huì)得到認(rèn)可,從而選擇與我們長(zhǎng)期合作。這樣,我們也可以走得更遠(yuǎn)!

implements接口名稱

例如,下面定義一個(gè)車(總稱)的接口,這里的車是各種車的總稱:

Public Interface ICar

Property color() As String

Property speed() As Long

Sub PrintInfo()

End Interface

然后在不同類型的“車”類里實(shí)現(xiàn)它:

Public Class A_Car

Implements ICar

Dim m_color As String, m_speed As Long

Public Property color() As String Implements ICar.color

Get

Return m_color

End Get

Set(ByVal Value As String)

m_color = Value

End Set

End Property

Protected Overrides Sub Finalize()

MsgBox(I was deconstructed!)

End Sub

Public Sub New()

m_color = Red

m_speed = 210

MsgBox(I was constructed!)

End Sub

Public Property speed() As Long Implements ICar.speed

Get

Return m_speed

End Get

Set(ByVal Value As Long)

m_speed = speed

End Set

End Property

Public Sub PrintInfo() Implements ICar.PrintInfo

MsgBox(Color: m_color vbNewLine Speed: m_speed, MsgBoxStyle.Information)

End Sub

End Class

在 Form 的 Load 事件中編寫:

Dim myCar As New A_Car

myCar.PrintInfo()

運(yùn)行之后就創(chuàng)建了一個(gè) A_Car 類的實(shí)例 myCar,然后出現(xiàn)兩個(gè)對(duì)話框,分別說明實(shí)例已經(jīng)創(chuàng)建和汽車的信息。當(dāng)窗體卸載時(shí),這個(gè)類的實(shí)例 myCar 將自動(dòng)銷毀,這時(shí)將出現(xiàn)一個(gè)“I was deconstructed!”的對(duì)話框。

聲明一個(gè)接口時(shí),需要考慮以下幾點(diǎn):

1.接口主體只限于對(duì)方法,索引器以及屬性的聲明;

2.接口成員是隱式公開的,如果對(duì)其顯式指定訪問級(jí)別,就會(huì)出現(xiàn)編譯器錯(cuò)誤;

3.接口中不能包含字段,構(gòu)造函數(shù)和常量等;

4.在接口中不能實(shí)現(xiàn)任何方法,屬性或者索引器;

5.在指定方法時(shí),只需要給出返回類型,名稱和參數(shù)列表,然后分號(hào)結(jié)束。

面向?qū)ο蟮慕涌?/p>

在C++中,一個(gè)類被允許繼承多個(gè)類。但是在Java以后的語言不被允許。

這樣,如果想繼承多個(gè)類時(shí)便非常困難。所以開發(fā)方想出了新辦法:接口。

一個(gè)接口內(nèi),允許包含變量、常量等一個(gè)類所包含的基本內(nèi)容。但是,接口中的函數(shù)不允許設(shè)定代碼,也就意味著不能把程序入口放到接口里。由上可以理解到,接口是專門被繼承的。接口存在的意義也是被繼承。和C++里的抽象類里的純虛函數(shù)是相同的。不能被實(shí)例化。

定義接口的關(guān)鍵字是interface,例如:

publicinterfaceMyInterface{

public void add(int x,int y);

public void volume(int x,int y,int z);

}

繼承接口的關(guān)鍵字是implements,相當(dāng)于繼承類的extends。

需要注意的是,當(dāng)繼承一個(gè)接口時(shí),接口里的所有函數(shù)必須全部被覆蓋。例如:

class Demo implements MyInterface{

public void add(int x,int y){

System.out.println( +(x+y));

}

public void volume(int x,int y,int z){

System.out.println( +(x*y*z));

}

public static void main(String args[]){

Demo d=new Demo();

d.add(10,20);

d.volume(10,10,10);

}

}

輸出結(jié)果:

30

1000

當(dāng)想繼承多個(gè)類時(shí),開發(fā)程序不允許,報(bào)錯(cuò)。這樣就要用到接口。因?yàn)榻涌谠试S多重繼承(,),而類不允許。所以就要用到接口。

Microsoft .NET 中的基類繼承

繼承概述

面向?qū)ο缶幊?(OOP) 語言的一個(gè)主要功能就是 繼承 繼承是指這樣一種能力 它可以使用現(xiàn)有類的所有功能 并在無需重新編寫原來的類的情況下對(duì)這些功能進(jìn)行擴(kuò)展 在 Microsoft? Visual Basic? NET 發(fā)布之前 Visual Basic 程序員并不具備這種能力 在 Visual Basic NET 中 您可以繼承 Microsoft NET 框架中的類 也可以繼承您自己創(chuàng)建的類 在本文中 我們將學(xué)習(xí)如何使用繼承 并了解繼承是如何大大縮短編程時(shí)間的 簡(jiǎn)單示例

在您創(chuàng)建的許多類中 您會(huì)發(fā)現(xiàn)您常常需要與先前創(chuàng)建的類中的屬性和方法相同的屬性和方法 例如 如果有一個(gè)名為 Person 類的基類 該類包含 LastName 和 FirstName 屬性以及 Print 方法 您會(huì)發(fā)現(xiàn)對(duì)于 Employee 類您也需要這些屬性和方法 您可能還需要其他屬性 例如 EmployeeID 和 Salary 如果從 Person 類(基類)繼承 您可以將這些屬性添加到新的 Employee 類中 并且仍然可以訪問 Person 類中的所有屬性 繼承是指某個(gè)類可將其自身定義為具有某個(gè)特定類的所有屬性和方法 然后再通過添加其他屬性和方法對(duì)基類的定義進(jìn)行擴(kuò)展的能力

繼承術(shù)語

在深入研究這個(gè)主題之前 讓我們先來定義幾個(gè)術(shù)語 通過繼承創(chuàng)建的新類稱為 子類 被繼承的類稱為 基類 父類 或 超類 在某些 OOP 語言中 一個(gè)子類可以繼承多個(gè)基類 也就是說 如果有一個(gè) Person 類和一個(gè) Car 類 則 Driver 類可以繼承這兩個(gè)類的所有屬性和方法 而在 NET 中 只允許單一繼承 因此每個(gè)子類只能有一個(gè)基類

NET 支持三類繼承 實(shí)現(xiàn)繼承 接口繼承和可視繼承 實(shí)現(xiàn)繼承是指使用基類的屬性和方法而無需額外編碼的能力 接口繼承是指僅使用屬性和方法的名稱 但是子類必須提供實(shí)現(xiàn)的能力 可視繼承是指子窗體(類)使用基窗體(類)的外觀和實(shí)現(xiàn)代碼的能力 在 NET 中 一個(gè)類可以從某個(gè)基類繼承而來 而這個(gè)基類又可以從另外一個(gè)類繼承而來 而且 您可以在一個(gè)類中使用一個(gè)或多個(gè)接口

使用繼承的原因

繼承可以避免重復(fù)編寫相同的代碼 因此十分有用 如果有兩個(gè)單獨(dú)的類 而每個(gè)類都必須實(shí)現(xiàn) FirstName 和 LastName 屬性 則可能會(huì)出現(xiàn)重復(fù)代碼 如果要更改某個(gè)屬性的實(shí)現(xiàn)方式 則需要查找已實(shí)現(xiàn)這些屬性的所有類以進(jìn)行更改 這不僅要耗費(fèi)大量時(shí)間 還增加了不同類中出現(xiàn)錯(cuò)誤的風(fēng)險(xiǎn)

在考慮使用繼承時(shí) 有一點(diǎn)需要注意 那就是兩個(gè)類之間的關(guān)系應(yīng)該是 屬于 關(guān)系 例如 Employee 是一個(gè)人 Manager 也是一個(gè)人 因此這兩個(gè)類都可以繼承 Person 類 但是 Leg 類卻不能繼承 Person 類 因?yàn)橥炔⒉皇且粋€(gè)人

覆蓋

從基類中繼承功能時(shí) 您可能會(huì)發(fā)現(xiàn)在基類中編寫的一般方法僅執(zhí)行繼承類所需的部分功能 要執(zhí)行所需的全部功能 您可以在新類中覆蓋基類的方法 而無需使用新的名稱創(chuàng)建一個(gè)全新的方法

進(jìn)行覆蓋時(shí) 您可以選擇完全覆蓋基類的方法 也可以在繼承類中編寫代碼來執(zhí)行某些操作 然后再調(diào)用基類的方法 在覆蓋時(shí) 請(qǐng)務(wù)必仍然使用與原始方法相同的合約(參數(shù)和返回類型) 也可以選擇先調(diào)用基類的方法 然后在執(zhí)行完基類的方法后編寫其他代碼

繼承基類

繼承使您可以在一個(gè)類中使用另一個(gè)類的全部屬性和方法 您可以使用關(guān)鍵字 Inherits 來獲得基類的功能 而無需將代碼從一個(gè)類復(fù)制并粘貼到另一個(gè)類中

實(shí)現(xiàn)繼承

本文將創(chuàng)建一個(gè)新類 LineDelim 它將繼承 Creating Classes in NET(英文)一文中創(chuàng)建的 Line 類的所有功能 之后 本文將通過添加兩個(gè)其他屬性和一個(gè)方法對(duì) Line 類進(jìn)行擴(kuò)展 要添加的第一個(gè)屬性是 Delimiter 使用它可以獲得一個(gè)分隔符字符 并將其設(shè)置到類中 此分隔符將用于將行中的所有空格替換為分隔符字符 要添加的第二個(gè)屬性是 OriginalLine 它將用于在向文本行插入新的分隔符之前保留文本的原始行 要?jiǎng)?chuàng)建的新方法是 ReplaceAll() 它將用于將文本行中的所有空格替換為分隔符字符 然后我們將學(xué)習(xí)如何覆蓋 GetWord 方法 以便使用此分隔符(而不是空格)分隔文本行并搜索第一個(gè)詞 構(gòu)建示例窗體

要?jiǎng)?chuàng)建窗體 請(qǐng)單擊 Project(項(xiàng)目) 然后單擊 Add Windows Form(添加 Windows 窗體) 將窗體命名為 frmLineTest VB 并單擊 OK(確定)

然后在該窗體上創(chuàng)建相應(yīng)的控件并設(shè)置屬性

構(gòu)建 Line 類

接下來將構(gòu)建要繼承的 Line 類

從菜單中單擊 Project(項(xiàng)目) 然后單擊 Add Class(添加類) 鍵入如下所示的代碼

Public Class LinePrivate mstrLine As StringProperty Line() As StringGetReturn mstrLineEnd GetSet(ByVal Value As String)mstrLine = ValueEnd SetEnd PropertyReadOnly Property Length() As IntegerGetReturn mstrLine LengthEnd GetEnd PropertyPublic Function GetWord() As StringDim astrWords() As StringastrWords = mstrLine Split( ToCharArray())Return astrWords( )End FunctionEnd Class

創(chuàng)建子類 既然窗體和基類都已經(jīng)創(chuàng)建完畢 現(xiàn)在便可以開始執(zhí)行繼承了

單擊 Project(項(xiàng)目) 然后單擊 Add Class(添加類) 將該類命名為 LineDelim vb 并單擊 OK(確定) 添加新類時(shí) 請(qǐng)修改 Visual 所創(chuàng)建的代碼 使之與下面的示例代碼相似

Public Class LineDelimInherits Line

End Class

因?yàn)樘砑恿?Inherits Line 語句 所以您可以在這一新創(chuàng)建的類中使用 Line 類的所有屬性和方法

試一試打開 frmLineTest vb 窗體 雙擊 Get Word(取詞)按鈕 向此按鈕的單擊事件過程添加以下代碼

Protected Sub btnFirst_Click(ByVal sender As Object _

ByVal e As System EventArgs) Handles btnFirst ClickDim oLine As LineDelim = New LineDelim()oLine Line = txtLine TexttxtFirstWord Text = oLine GetWord()End Sub

運(yùn)行項(xiàng)目 并在窗體上單擊 Get Word(取詞)按鈕 您將看到 The 一字出現(xiàn)在按鈕旁邊的只讀文本框中 Inherits 語句的功能非常強(qiáng)大 只需要使用這一個(gè)語句 就可以在 LineDelim 類中使用 Line 類的所有屬性和方法 盡管這個(gè)新類尚未執(zhí)行任何新的操作 但它卻表明從 Line 類中繼承的所有代碼都可以正常工作

添加其他功能 現(xiàn)在 您可以使用其他屬性和方法對(duì) LineDelim 類進(jìn)行擴(kuò)展 要向 LineDelim 類添加兩個(gè)新的屬性 請(qǐng)執(zhí)行以下步驟

在上一部分添加的 Inherits 語句后添加兩個(gè) Private 變量 如下所示

Private mstrDelim As String = Private mstrOriginal As String

鍵入如下代碼 為這兩個(gè) Private 變量添加適當(dāng)?shù)?Property 語句 您可以將以下代碼放在上面輸入的兩行代碼后面(緊挨這兩行)

Public Property Delimiter() As StringGetReturn mstrDelimEnd GetSet(ByVal Value As String)mstrDelim = ValueEnd SetEnd PropertyPublic ReadOnly Property OriginalLine() As StringGetReturn mstrOriginalEnd GetEnd Property

現(xiàn)在您可以使用 Delimiter 屬性設(shè)置并獲取 Private 變量 mstrDelim 的值

如果不希望其他人更改這些屬性 您可以將屬性設(shè)為只讀 要執(zhí)行此操作 請(qǐng)不再使用 Set 語句 并在 Property 語句中添加 ReadOnly 屬性 有關(guān)示例 請(qǐng)參見上面代碼中顯示的 OriginalLine 屬性聲明

接下來 需要?jiǎng)?chuàng)建一個(gè)稱為 ReplaceAll 的方法 此方法可以將文本行中的所有空格替換為傳遞到 Delimiter 屬性中的分隔符字符

Public Function ReplaceAll() As StringmstrOriginal = MyBase LineReturn MyBase Line Replace( mstrDelim ToChar())End Function

ReplaceAll 方法通過基類的 Line 方法檢索原始文本行 而以前從基類中檢索屬性時(shí)使用的是 MyBase Line 語法 ReplaceAll 函數(shù)將 MyBase Line 屬性的值放入您剛剛為該類創(chuàng)建的 Private 變量 mstrOriginal 中 String 數(shù)據(jù)類型的 Replace 方法將字符串字符的所有實(shí)例替換為在 Delimiter 屬性中設(shè)置的新分隔符字符 mstrDelim MyBase 關(guān)鍵字 可以從任一子類使用 MyBase 關(guān)鍵字 以調(diào)用基類中的任何屬性或方法 即使基類的方法在子類中已被覆蓋 您也可以使用該關(guān)鍵字對(duì)其進(jìn)行調(diào)用 例如 如果在基類中存在 ReplaceAll 方法 但在子類中該方法已被覆蓋 您可以從子類的 ReplaceAll 方法中調(diào)用基類的 ReplaceAll 方法

試一試打開 frmLineTest VB 窗體 雙擊 Replace(替換)以調(diào)出單擊事件過程 在 btnReplace 按鈕的單擊事件中編寫以下代碼

Protected Sub btnReplace_Click( _ ByVal sender As Object _ByVal e As System EventArgs) Handles btnReplace ClickDim oLine As LineDelim = New LineDelim()oLine Delimiter = txtDelim TextoLine Line = txtLine TexttxtReplace Text = oLine ReplaceAll()End Sub

此代碼將 Delimiter 屬性設(shè)置為在示例窗體的 txtDelimiter 文本框中輸入的值 然后您可以調(diào)用 ReplaceAll 方法 將文本行中的所有空格更改為新的分隔符字符

按 F 鍵運(yùn)行該項(xiàng)目 單擊 Replace(替換) 您將看到 在此按鈕旁邊的文本框中 句中的每個(gè)詞之間都有一個(gè)逗號(hào) 覆蓋方法 添加 Delimiter 屬性后 您可能想更改 LineDelim 類中的 GetWord 方法 以便使用相應(yīng)的分隔符替代 Line 類使用的單個(gè)空格 因?yàn)槟灰欢ㄏ敫幕?所以需要覆蓋 LineDelim 類中 GetWord 方法的功能 在 LineDelim 類中創(chuàng)建新的 GetWord 方法之前 您需要在 Line 類的 GetWord 方法聲明中添加一個(gè)關(guān)鍵字

在 Solution Explorer(解決方案資源管理器)窗口中 打開 Line vb 類的代碼窗口 找到 GetWord 方法的聲明(聲明不包含參數(shù)) 如下所示 Public Overloads Function GetWord() As String在函數(shù)聲明中添加關(guān)鍵字 Overridable 如下所示(沒有此關(guān)鍵字 就無法覆蓋此方法) Public Overridable Overloads Function GetWord() As String打開 LineDelim vb 類 并使用如下代碼添加新的 GetWord 方法

Public Overloads Overrides Function GetWord() As StringDim astrWords() As StringastrWords = MyBase Line Split(mstrDelim ToCharArray())Return astrWords( )End Function

如果要更改基類中方法的功能 則有必要在函數(shù)聲明中添加 Overrides 關(guān)鍵字 現(xiàn)在 LineDelim 類中的 GetWord 方法就可以使用 Delimiter 屬性的值來分隔句中的詞

如果只覆蓋其中一個(gè) GetWord 方法 則代碼只能查看這一個(gè)版本的方法 而無法調(diào)用其他版本的 GetWord 方法 要顯示所有方法 您必須覆蓋每一個(gè)方法 就象您在 LineDelim 類中所執(zhí)行的操作一樣

試一試按 F 鍵運(yùn)行該項(xiàng)目 在句中的每個(gè)詞之間都輸入一個(gè)逗號(hào) 并在 Delimiter(分隔符)文本框中輸入一個(gè)逗號(hào) 單擊 Get Word(取詞) 句中的第一個(gè)詞將出現(xiàn)在該按鈕旁邊的文本框中

抽象類 在本文上一部分的示例中 我們學(xué)習(xí)了如何創(chuàng)建 Person 對(duì)象 這是因?yàn)槲覀兿胩幚砥胀ǖ娜?但是您可能會(huì)發(fā)現(xiàn) 如果不先添加一些特定的行為和/或數(shù)據(jù) 就無法使用 Person 類執(zhí)行任何操作 因此您可以將 Person 類變?yōu)槌橄箢?抽象類僅定義將由子類創(chuàng)建的一般屬性和方法

將 Person 類定義為只能被繼承的抽象類 而不是在運(yùn)行時(shí)實(shí)際創(chuàng)建的對(duì)象 從該類繼承的每個(gè)類(如 Employee 類)都將使用特定的功能來創(chuàng)建所有相應(yīng)的屬性和方法 例如 Employee 類將創(chuàng)建實(shí)際的 Print 方法 而 Person 類僅定義必須存在 Print 方法 Person 類中沒有與 Print 方法相關(guān)聯(lián)的代碼 使用抽象類的原因有多種 對(duì)于強(qiáng)制子類設(shè)計(jì)人員實(shí)現(xiàn)應(yīng)用程序通常所需的所有接口 抽象類非常有用 您可以在不破壞客戶端應(yīng)用程序的情況下向子類添加新方法 這是使用接口所無法實(shí)現(xiàn)的 可以在基類中提供許多默認(rèn)實(shí)現(xiàn)方法 從而減少子類需要完成的工作量

接口繼承 創(chuàng)建抽象類時(shí) 請(qǐng)使用關(guān)鍵字 Interface 而不是 Class 為接口命名 然后定義需要子類實(shí)現(xiàn)的所有屬性和方法 這是因?yàn)榛愔袥]有可以實(shí)現(xiàn)的屬性和方法 它只包含一般數(shù)據(jù) 而不包含方法 您所創(chuàng)建的只是一個(gè)合約 它規(guī)定所有使用此接口的子類都必須遵循一定的規(guī)則

現(xiàn)在 請(qǐng)?jiān)谝褎?chuàng)建的項(xiàng)目中添加一個(gè)新類 從 Visual Studio 菜單中 單擊 Project(項(xiàng)目) 然后單擊 Add Class(添加類) 在類中添加以下代碼

Interface PersonProperty FirstName() As StringProperty LastName() As String

Sub Print()Sub Talk()End Interface

您會(huì)發(fā)現(xiàn) 您定義屬性和子過程的方法與您通常定義這些屬性和過程的方法一樣 唯一的差別在于 您沒有為它們編寫任何代碼 現(xiàn)在來看看如何在類定義中使用此接口

在上一步驟創(chuàng)建的類文件中添加以下代碼

Public Class EmployeeImplements PersonPrivate mstrFirstName As StringPrivate mstrLastName As StringProperty FirstName() As String _Implements Person FirstNameGetReturn mstrFirstNameEnd GetSetmstrFirstName = ValueEnd SetEnd PropertyProperty LastName() As String _Implements Person LastNameGetReturn mstrLastNameEnd GetSetmstrLastName = ValueEnd SetEnd PropertySub Print() Implements Person Print 在此處添加一些代碼 End Sub

Sub Talk() Implements Person Talk 在此處添加一些代碼End SubEnd Class

在 Employee 類定義之后的第一行是 Implements Person 此關(guān)鍵字表示您要遵守 Person 接口中定義的合約 現(xiàn)在您可以定義該合約中的所有屬性和方法 在每一個(gè) Property 語句后面 都必須包含 Implements 關(guān)鍵字 并且必須指定接口的名稱和您正在使用的方法/屬性的名稱(兩個(gè)名稱之間有一個(gè)點(diǎn) [ ]) Visual 將跟蹤每一個(gè)接口 在所有接口創(chuàng)建完畢之前 您不能編譯應(yīng)用程序 如果要運(yùn)行代碼 則需要?jiǎng)?chuàng)建相應(yīng)的子過程 因?yàn)樵谏厦娴氖纠羞@些子過程被保留為空 創(chuàng)建所有子過程后 您就可以與您通常創(chuàng)建并使用任何其他對(duì)象一樣 聲明并使用新的 Employee 對(duì)象了

選擇要使用的繼承類型 有時(shí)候很難決定到底是使用實(shí)現(xiàn)繼承還是使用接口繼承 很多情況下 可能兩種繼承都會(huì)用到 但都只涉及一小部分 例如 您可能需要在 Line 類中添加必須被子類覆蓋的方法定義 在過程定義中使用 MustOverride 關(guān)鍵字即可實(shí)現(xiàn)此操作

Public MustOverride Sub Init()將此定義添加到類中以后 其作用類似于一個(gè)接口 在子類中 必須定義 Init 方法 并且該方法必須使用 Overrides 關(guān)鍵字 以下是如何定義 Init 方法的示例

Public Overrides Sub Init()mstrDelim = mstrLine = 測(cè)試行 End Sub同樣 請(qǐng)記住使用 Overrides 關(guān)鍵字 該關(guān)鍵字用于通知編譯器此方法將覆蓋父類中的 Init 方法

注意 Microsoft NET 框架的聯(lián)機(jī)幫助中提供了設(shè)計(jì)指南 可以幫助您決定要使用的繼承類型 阻止繼承在某些情況下 您可能不希望其他類繼承您的類 如果是這樣 您可以使用關(guān)鍵字 NotInheritable 來阻止類的繼承

Public Class NotInheritable Employee 類定義End ClassVisual Basic 以來的新增功能

使用 Visual Basic NET 您可以繼承 NET 框架包含的所有類 您可以創(chuàng)建自己的類 使這些類繼承現(xiàn)有的類 并通過對(duì)代碼進(jìn)行簡(jiǎn)單更改來添加或刪除功能

lishixinzhi/Article/program/net/201311/11397

vb和vb.net的區(qū)別

VB.NET和VB6.0有什么區(qū)別

Visual Basic .NET是Microsoft Visual Studio .NET套件中主要組成部分之一。.NET版本的Visual Basic增加了更多特性,而且演化為完全面向?qū)ο螅ň拖馛++)的編程語言。本文將介紹VB.NET的新特性,并比較VB6.0/VB.NET之間的區(qū)別,闡述如何利用VB.NET編寫簡(jiǎn)單的應(yīng)用程序。

1.1 什么是 VB.NET? Microsoft推出全新的編程和操作系統(tǒng)Framework——.NET,支持多種語言利用公共.NET庫(kù)開發(fā)應(yīng)用程序,這些應(yīng)用程序在.NET Framework上運(yùn)行。使用Visual Basic在.NET Framework上編程,這就是VB.NET。

首先,讓我演示在VB.NET中寫最簡(jiǎn)單的控制臺(tái)程序:Hello World。

1.2 Hello, World!“Hello World!”是初學(xué)者學(xué)習(xí)Windows編程的代表性程序。我們的第一個(gè)程序就叫做“Hello VB.NET World!”。該程序在控制臺(tái)輸出一句話:“Hello VB.NET World!”,代碼如下所示:

代碼 1.1: Hello VB.NET World例子Imports System

Module Module1

Sub Main()

System.Console.WriteLine("Hello VB.NET World!")

End Sub

End Module

1.3 VB.NET 編輯器和編譯器你可以在記事本或VS.NET IDE等任意文本編輯器中撰寫上述代碼,然后保存為HelloWorld.vb。 代碼編寫完成之后,要么在命令行、要么在VS.NET IDE中編譯它。在Microsoft .NET Framework SDK中已經(jīng)包括VB.NET編譯器vbc.exe[][1],從IDE或是命令行都可以調(diào)用。要從命令行編譯HelloWorld.vb,請(qǐng)?jiān)诿钚写翱谳斎?/p>

vbc HelloWorld.vb /out:HelloWorld.exe /t:exe

編譯結(jié)束后,HelloWorld.exe被創(chuàng)建到當(dāng)前目錄下。在資源管理其中雙擊圖標(biāo)或在命令行執(zhí)行,程序正確地運(yùn)行了。祝賀你進(jìn)入VB.NET開發(fā)者的行列。

Imports 語句

如你所知,大部分的.NET類型都在名字空間(namespace)中定義。Namespace是定義和管理類別的范疇。察看.NET Framework Class Library,可以看到數(shù)以百計(jì)的namespace。例如,System namespace就包括了Console、Object等類型定義。如果想使用Console類,需要用Imports指令導(dǎo)入System namespace。如下所示:

Imports System甚至可以明確地調(diào)用namespace而無需用Import導(dǎo)入。下面的例子展示了不用Import的“Hello World!”程序:

代碼1.2: Hello VB.NET World例子Module Module1

Sub Main()

System.Console.WriteLine("Hello VB.NET World!")

End SubEnd Module1.4 解析 "Hello VB.NET World!"程序第一行是:

Imports System; System namespace定義了Console類,該類用于讀寫控制臺(tái)(命令行窗口)。然后你定義了一個(gè)module:Module Module1

…End Module所有的VB程序都包括一個(gè)Main()方法,即應(yīng)用程序入口點(diǎn)。在例子程序中,我們調(diào)用Console.WriteLine()向控制臺(tái)寫入“Hello VB.NET World!”:

Sub Main()

Console.WriteLine(“Hello VB.NET World!”) End SubWriteLine()方法歸屬于Console類,它負(fù)責(zé)向控制臺(tái)寫一個(gè)帶有行結(jié)束符的字符串。如前所述,Console類定義于System namespace,你通過直接引用來控制類成員。

Console類負(fù)責(zé)讀寫系統(tǒng)控制臺(tái)。讀控制臺(tái)輸入用Read和ReadLine方法,向控制臺(tái)輸出用WriteLine方法。

表1.1 Console類定義的方法

方法 用途 例子

Read 讀入單個(gè)字符 int i = Console.Read();

ReadLine 讀入一行 string str = Console.ReadLine();

Write 寫一行 Console.Write("Write: 1");

WriteLine 寫一行,并帶上行結(jié)束符

Console.WriteLine("Test Output Data with Line");

1.5 VB.NET有什么新特點(diǎn)? VB.NET比 VB6.0更加穩(wěn)定,而且完全面向?qū)ο?。也許你還記得,VB6.0不支持繼承、重載和接口,所以不是真正面向?qū)ο蟮摹6鳹B.NET則支持這些面向?qū)ο筇匦?。VB6.0有兩個(gè)薄弱環(huán)節(jié)——多線程和異常處理。在VB.NET中,開發(fā)多線程應(yīng)用和使用C++/C#別無二致,結(jié)構(gòu)化異常處理也得到支持。稍后我們會(huì)詳細(xì)解釋這些特性。

下面是VB.NET的特性列表——

·面向?qū)ο蟮木幊陶Z言。支持繼承、重載、接口、共享成員和構(gòu)造器?!ぶС炙械腃LS特性,如存取控制.NET類、與其它.NET語言交互、元數(shù)據(jù)、公共數(shù)據(jù)類型、委托等等?!ざ嗑€程支持?!そY(jié)構(gòu)化異常處理。 1.6 名字空間與集合 前面討論了我們的第一個(gè)VB.NET程序。該程序中首先引人注意的是名字空間(namespace)。在.NET參考文檔中,你會(huì)發(fā)現(xiàn)每個(gè)類都?xì)w屬于某個(gè)namespace。那么,namespace到底是什么?

一個(gè)namespace是類和組件的邏輯組合,其目的在于將.NET class按類別定義。微軟借用了C++ class packaging概念:namespace來描述這種組合。.NET Framework中的組件被稱為集合(assembly)。全部.NET代碼在數(shù)百個(gè)庫(kù)文件(DLL)中定義。Namespace把a(bǔ)ssembly中定義的類組織起來。一個(gè)namespace可以包括多個(gè)assembly,一個(gè)assembly也可以在多個(gè)namespace中定義。 namespace樹的根節(jié)點(diǎn)是System namespace。在.NET Library中,每個(gè)class都在一組相似的類別中定義。例如,System.Data namespace只包括數(shù)據(jù)相關(guān)類。同樣,System.Multithreading只包括多線程類。

在使用.NET支持的語言(如C#、VB.NET、C++.NET等)創(chuàng)建新應(yīng)用程序時(shí),你會(huì)注意到每個(gè)應(yīng)用程序都被定義為一個(gè)namespace,而所有的class都?xì)w屬于這個(gè)namespace。通過引用這個(gè)namespace,其它應(yīng)用程序就能存取這些class。 在.NET中,代碼被編譯為中間語言(Intermediate Language,IL),assembly中存儲(chǔ)了IL代碼、元數(shù)據(jù)和其它資源文件。同一個(gè)assembly可以附屬于一個(gè)或多個(gè)Exe/DLL。所有的.NET庫(kù)都存儲(chǔ)在assembly中。

1.7 VB.NET: 完全面向?qū)ο蟮木幊陶Z言抽象、封裝、多態(tài)、繼承是面向?qū)ο笳Z言的四個(gè)基本屬性。VB6.0不支持繼承,而VB.NET則不然。所以,和C++一樣,VB.NET也是完全面向?qū)ο蟮木幊陶Z言。

Class 和 ModuleVB.NET用Class...End Class語句對(duì)創(chuàng)建class。每個(gè)VB.NET至少包括一個(gè)Module(模塊)。Module在Module…End Module語句對(duì)中實(shí)現(xiàn)。應(yīng)用程序的主要模塊是Main方法,亦即應(yīng)用程序入口點(diǎn)。

和VB6.0相似的地方是,都可以使用Function/Sub關(guān)鍵字定義方法。下面的例子顯示了如何創(chuàng)建class、添加方法,并從主程序調(diào)用方法: Imports System

Module Module1

Sub Main()

Dim cls As TestClass = New TestClass

Console.WriteLine(cls.MyMethod)

End Sub

Class TestClass

Function MyMethod() As String

Return "Test Method"

End Function

End Class

End ModuleProperty屬性(Property)是類變量的公共描述。Property…End Property語句用以創(chuàng)建property。屬性的Get/Set方法分別用于取得和設(shè)置屬性值。下面的例子中,Data是TestClass的屬性。

Imports System

Imports System.Console

Module Module1

Sub Main()

Dim cls As TestClass = New TestClass

WriteLine(cls.MyMethod)

WriteLine(cls.Data)

cls.Data = "New Data"

WriteLine(cls.Data)

End Sub

End Module

Class TestClass

Private strData As String = "Some Data"

Function MyMethod() As String

Return "Test Method!"

End Function

' Adding Data property to the class

Public Property Data() As String

Get

Return strData

End Get

Set(ByVal Value As String)

strData = Value

End Set

End Property

重載VB.NET通過overload關(guān)鍵字支持方法重載。使用這個(gè)關(guān)鍵字,你可以定義同名但不同參數(shù)的方法。

類成員訪問域

除了原有的Private和Public,VB.NET引入了幾個(gè)新關(guān)鍵字。全部訪問域關(guān)鍵字列表如下:

關(guān)鍵字 作用域

Private 限于class內(nèi)部

Public 可以從class外訪問

Friend 限于class所屬的應(yīng)用程序內(nèi)

Protected 只能被class和其派生類訪問

Protected Friend 能被class、應(yīng)用程序和派生類訪問

繼承繼承是面向?qū)ο缶幊陶Z言中最常用的技術(shù)。繼承讓你能夠重用類代碼和功能。

VB.NET支持繼承,而VB6.0則不支持。繼承的好處在于你能使用任何人編寫的類,從這些類派生自己的類,然后在自己的類中調(diào)用父類功能。在下面的例子中,Class B派生自Class A,我們將從Class B中調(diào)用Class A的方法MethodA。

Imports System

Imports System.Console

Module Module1

Sub Main()

Dim bObj As B = New B

WriteLine(bObj.MethodA())

End Sub

End Module

' Class A defined

Public Class A

Function MethodA() As String

Return "Method A is called."

End Function

End Class

'Class B, inherited from Class A. All members (Public and Protected)

' can be access via B now.

Public Class B

Inherits A

Function MethodB() As String

Return "Method B is called."

End Function

End Class

可以從一個(gè)class中派生多個(gè)自定義class,也可以從多個(gè)class派生一個(gè)自定義class。

共享的成員類的共享成員被類的所有實(shí)體共享。共享成員可能是屬性、方法或字段/值域。在你不想讓用戶全面控制自己的類時(shí),共享成員相當(dāng)有用。例如,你可以開發(fā)一個(gè)類庫(kù),讓用戶通過共享成員使用其中的部分功能。

可以通過class本身引用共享成員,而無需通過類的實(shí)體。例如:Module Module1

Sub Main()

WriteLine(A.MethodA())

End Sub

End Module

' Class A defined

Public Class A

Shared Function MethodA() As String

Return "Method A is called."

End Function

End Class

多線程VB語言的一大弱點(diǎn)就是缺乏編寫自由線程(free-threaded)程序的能力。在.NET Framework中,所有語言共享CRL(Common Runtime Library,公共運(yùn)行庫(kù)),也就是說,你可以用VB.NET、C#或其它.NET語言編寫同樣的程序。

System.Threading namespace定義了線程類。我們只需要引入System.Threading namespace,即可使用線程類。

System.Threading.Thread類提供線程對(duì)象,可以使用Thread類創(chuàng)建或破壞線程。

創(chuàng)建線程使用Thread類的實(shí)體創(chuàng)建一個(gè)新線程,然后用Thread.Start方法開始執(zhí)行線程。線程構(gòu)造器接受一個(gè)參數(shù),該參數(shù)指明你要在線程中執(zhí)行的procedure。在下例中,我想在oThread1(Thread類的一個(gè)實(shí)體)的第二線程中執(zhí)行SecondThread過程:

oThread1 = New Thread(AddressOf SecondThread)

SecondThread procedure looks like below:

Public Sub SecondThread()

Dim i As Integer

For i = 1 To 10

Console.WriteLine(i.ToString())

Next

End Sub

然后,調(diào)用Thread.Start()開始線程:

oThread1.Start()

下面的代碼創(chuàng)建兩個(gè)第二線程:

Imports System

Imports System.Threading

Module Module1

Public oThread1 As Thread

Public oThread2 As Thread

Sub Main()

oThread1 = New Thread(AddressOf SecondThread)

oThread2 = New Thread(AddressOf ThirdThread)

oThread1.Start()

oThread2.Start()

End Sub

Public Sub SecondThread()

Dim i As Integer

For i = 1 To 10

Console.WriteLine(i.ToString())

Next

End Sub

Public Sub ThirdThread()

Dim i As Integer

For i = 1 To 10

Console.WriteLine("A" + i.ToString())

Next

End Sub

End Module

破壞線程 調(diào)用Abort方法來破壞(中止)一個(gè)線程。在調(diào)用Abort之前,確保用IsAlive判斷線程處于活動(dòng)狀態(tài)。

If oThread1.IsAlive Then

oThread1.Abort()

End If

暫停線程可以使用Sleep方法來暫停線程執(zhí)行。Sleep方法接受一個(gè)以毫秒為單位的參數(shù),指明線程應(yīng)當(dāng)暫停多長(zhǎng)時(shí)間。

下面的例子讓線程暫停1秒鐘:

oThread2.Sleep(1000)你也可以使用Suspend和Resume方法來掛起和繼續(xù)線程執(zhí)行。

設(shè)定線程優(yōu)先級(jí)Thread類的Priority屬性用于設(shè)定線程優(yōu)先級(jí)。該屬性可以設(shè)置為Normal,AboveNormal,BelowNormal,Highest和Lowest。如:

oThread2.Priority = ThreadPriority.Highest線程與Apartment使用ApartmentState屬性設(shè)置線程的apartment類型,該屬性值可以為STA,MTA或是Unknown[][2]:

oThread.ApartmentState = ApartmentState.MTAMTS意味著可以使用多線程模式,而STA則只能是單線程執(zhí)行。

Public Enum ApartmentState

{

STA = 0,

MTA = 1,

Unknown = 2,

}

1.8 結(jié)構(gòu)化異常處理異常處理也被稱之為錯(cuò)誤處理。作為VB程序員,你一定對(duì)On Error Goto和On Error Resume Next這些VB6.0錯(cuò)誤處理語句耳熟能詳。這種類型的錯(cuò)誤處理被稱為非結(jié)構(gòu)化異常處理(Unstructured Exception Handling)。而在VB.NET中,Microsoft推出了結(jié)構(gòu)化異常處理機(jī)制。VB.NET支持類似C++的TryCatch..Finally控制。Try..Catch..Finally結(jié)構(gòu)如下: Try

' 可能導(dǎo)致異常的代碼

Catch

' 當(dāng)異常發(fā)生時(shí)處理異常的代碼

Finally

' 清理現(xiàn)場(chǎng)

End Try

Try語句塊用以拋出異常。如果異常發(fā)生,在Catch語句塊中處理。Finally語句塊是可選的,在需要釋放資源時(shí)特別有用。

1.9 VB6.0與VB.NET的不同之處除了上面談到的語言進(jìn)化,還有一些語法上的變化。所有這些語言和語法的變化在MSDN中均可查到,本文只作簡(jiǎn)單介紹。

數(shù)據(jù)類型(Data Type)的改變VB.NET中有些數(shù)據(jù)類型得到改進(jìn)。下面是變化對(duì)照表。

數(shù)據(jù)類型 VB6.0 VB.NET

Integer 16 bit size 32 bit size

Long 32 bit size 64 bit size

Currency 用于存儲(chǔ)大浮點(diǎn)數(shù) 被decimal替代,支持更高精度

Variant 可以存儲(chǔ)任意類型數(shù)據(jù) 被Object類型替代,也可以存儲(chǔ)任意類型數(shù)據(jù),但結(jié)果更好

Date Date類型被存儲(chǔ)為double 引入DateTime類型,用于存儲(chǔ)不同格式的日期

在VB.NET中,Short數(shù)據(jù)類型是16 bit的。Short,Integer和Long都等同于CLR的System.Int16、System.Int32和System.Int64類型。 變量聲明的變化在VB6.0中,變量聲明有許多限制。其中之一就是不能同行聲明多個(gè)變量。如果一定要在一行中聲明多個(gè)變量,就一定得指明每個(gè)變量的類型,否則將被默認(rèn)為Variant類型。

Dim a1, a2 As Integer Dim a3 As Integer, a4 As Integer 第一行中的a1是Variant類型,a2是Integer類型。第二行中兩個(gè)變量都是Integer類型。VB.NET支持同行聲明多個(gè)變量,舉例如下:

Dim a1, a2, a3 As Integer 變量初始化是另一個(gè)問題。在VB6.0中不能同時(shí)聲明和初始化變量,而VB.NET則支持這個(gè)特性。

Dim name As String = "Mahesh"System.Console.Write(name) 聲明常量也可以照此辦理:Const DT_COUNT As Integer = 23 New關(guān)鍵字。在VB.NET中,New關(guān)鍵字用于創(chuàng)建對(duì)象。由于數(shù)據(jù)類型是對(duì)象,所以New關(guān)鍵字用以創(chuàng)建一個(gè)數(shù)據(jù)類型對(duì)象。

Dim i As Integer = New Integer()i = 10System.Console.WriteLine(i.ToString()) 代碼塊級(jí)別支持。像C++一樣,VB.NET支持代碼塊級(jí)別的作用域檢查。在語句塊中聲明的變量只在塊內(nèi)有效。

For i = 1 To 10Dim p As LongSystem.Console.WriteLine(i.ToString())NextSystem.Console.WriteLine(p.ToString()) 這段代碼在VB.NET中會(huì)得到一個(gè)編譯錯(cuò)誤,因?yàn)閜在For..Next語句塊之外不可訪問。在VB6.0中這段代碼可以通過。

改進(jìn)了的類型安全

在VB6.0中,當(dāng)你聲明一個(gè)對(duì)外部過程的引用時(shí),可以指定任意類型的參數(shù)為As Any。Any關(guān)鍵字禁止了類型檢查,允許任意數(shù)據(jù)類型傳入和返回。

VB.NET不支持Any關(guān)鍵字。你必須指定每個(gè)參數(shù)和返回值的數(shù)據(jù)類型。數(shù)組VB.NET對(duì)數(shù)組作了明顯的改動(dòng)。

數(shù)組范圍。在VB.NET中,你需要格外留意數(shù)組范圍問題。VB6.0默認(rèn)數(shù)組下界為0,故數(shù)組中的元素?cái)?shù)量等與數(shù)組上界值加一。下面的數(shù)組界限從A(0)到A(10),共有11個(gè)元素:

Dim A(10) As Single可以使用Option Base改變下界值為1。在VB.NET中,數(shù)組和C++一樣,下界值為0,不支持Option Base。注意:MSDN文檔指出數(shù)組只能包括與其尺寸相等的元素?cái)?shù)量,例如:Dim A(10) As Integer 只能包括10個(gè)元素(從A(0)到A(9)),但在編譯下面這段代碼時(shí)我發(fā)現(xiàn)它運(yùn)行良好,看起來數(shù)組中容納了11個(gè)元素。

Dim A(10) As Integer A(0) = 12 A(2) = 24 A(10) = 23 System.Console.WriteLine(A(0).ToString()) System.Console.WriteLine(A(10).ToString())System.Console.WriteLine(UBound(A).ToString()) System.Console.WriteLine(LBound(A).ToString()) Lbound和Ubound分別返回 0與10。ReDim和Fixed Array。你可以在VB6.0中指定固定長(zhǎng)度的數(shù)組。

Dim ArrWeekDays(0 To 6) As Integer

這里的ArrWeekDays數(shù)組是固定長(zhǎng)度的,不能用ReDim語句改變長(zhǎng)度。VB.NET不支持固定長(zhǎng)度數(shù)組,所以ReDim總是有效。

可以用下面兩種方式聲明數(shù)組: Dim ArrWeekDays(6) As IntegerDim ArrWeekDays() As Integer = {1, 2, 3, 4, 5, 6} ReDim語句。在VB6.0中,ReDim用于初始化動(dòng)態(tài)數(shù)組。在VB.NET中你不能把它當(dāng)作聲明用。ReDim只能用于改變數(shù)組長(zhǎng)度,不過不能改變數(shù)組維度。

Variant對(duì)陣ObjectVB6.0中的Variant數(shù)據(jù)類型能存儲(chǔ)任意類型變量,VB.NET中Object具備相同能力。

算術(shù)操作符VB.NET支持類似C++的快捷方式。下面的表格顯示了常規(guī)操作與快捷操作的不同之處??旖莘绞揭部捎糜?、/、|、等操作符。

操作符 常規(guī)語法 快捷方式加法 A = A+5 A +=5 減法 A = A – 5 A -+ 5固定長(zhǎng)度字符串

在VB6.0中,可以在聲明字符串時(shí)指定其長(zhǎng)度。VB.NET不支持固定長(zhǎng)度字符串。

布爾操作符VB6.0中的And、Or或是Xor語句是按位操作符。而在VB.NET中,它們是布爾操作符。執(zhí)行這些操作將返回true或false。VB.NET引入新操作符來完成按位操作。

操作符 描述 BitAnd 按位AndBitOr 按位OrBitXor 按位XorBitNot 按位Not結(jié)構(gòu)與自定義類型在VB6.0中,你使用Type…End Type語句塊創(chuàng)建結(jié)構(gòu)或自定義類型。例如:

Type StdRec

StdId As Integer

StdName As String End Type

VB.NET引入新的語法:Structure。Type…End Type不再被支持。Structure…End Structure與C++用法相同??梢灾付ńY(jié)構(gòu)中每個(gè)元素的可訪問域,如Public、Protected、Friend、Protected Friend、Private等。例如:

Structure StdRec

Public StdId As Integer Public StdName As String

Private StdInternal As String End StructureVB.NET中的Structures就像類一樣,也可以擁有方法和屬性。New和Nothing關(guān)鍵字VB6.0中,AS New和Nothing關(guān)鍵字用于聲明一個(gè)對(duì)象并初始化它。 VB.NET不支持隱式創(chuàng)建對(duì)象。如前所言,甚至連數(shù)據(jù)類型都是對(duì)象。你可以采用以下兩種方法創(chuàng)建數(shù)據(jù)類型或?qū)ο螅?Dim i As Integer Dim i As Integer = New Integer() // Do something if i = Nothing Then End If 不支持Set語句VB6.0使用Set語句指派對(duì)象。例如:Set myObj = new MyObjectSet a = b在VB.NET中,不需要使用Set指派對(duì)象。例如:myObj = new MyObj()a = b過程(procedure)語法的變化在VB.NET中過程語法有了很多變化。例如類似C++的過程調(diào)用方式、ByVal(傳值)為默認(rèn)類型、Optional關(guān)鍵字、return語句等等。類似C++的過程調(diào)用方式 VB6.0允許不用加圓括號(hào)調(diào)用過程(sub)。不過,用Call語句調(diào)用函數(shù)或sub時(shí),一定要使用圓括號(hào)。例如:Dim I as IntegerCall EvaluateData(2, i) EvaluateData 2, i 在VB.NET中,所有的方法調(diào)用都需要圓括號(hào),而Call語句則是可選的。 ByVal是默認(rèn)參數(shù)類型在VB6.0中,在調(diào)用函數(shù)或sub時(shí)ByRef(傳址)是默認(rèn)類型。那意味著所有改變將反映到傳入的變量。VB.NET改變了這種方式?,F(xiàn)在,默認(rèn)的參數(shù)類型是ByVal(傳值)。 Optional關(guān)鍵字VB6.0使用Optional關(guān)鍵字可用來讓用戶決定傳入一個(gè)默認(rèn)值,之后在調(diào)用IsMissing函數(shù)判斷參數(shù)是否有效。 而在VB.NET中,每個(gè)可選參數(shù)必須聲明其默認(rèn)值,無需調(diào)用IsMissing函數(shù)。例如:Sub MyMethod(Optional ByVal i As Integer = 3)

Return語句VB.NET的Return語句與C++相似。使用Return語句把控制權(quán)從過程返還給調(diào)用者。在VB6.0中,Return語句與GoSub語句一起使用。VB.NET不再支持GoSub語句。流程控制的改變下面是VB.NET對(duì)流程控制語句的修改:1. GoSub不再受到支持。2. Call、Function和Sub語句均可用于調(diào)用過程。3. On ... GoSub和On ... GoTo語句不再受支持??梢允褂肧elect Case語句來替代。4. While ... Wend語句現(xiàn)在改為While…End While語句。不再支持Wend關(guān)鍵字。小結(jié) Visual Basic .NET是.NET版本的Visual Basic,已經(jīng)從根本發(fā)生了變化!通過本文你了解到VB6.0和VB.NET的區(qū)別是很大的,可以說根本就是兩種不同的語言,因?yàn)樗鼈兊膬?nèi)核發(fā)生了變化,VB6.0是基于COM而vb.net是基于.net框架的,因?yàn)檫@個(gè)變化,所以在構(gòu)造類時(shí)也發(fā)生了根本性的變化。


當(dāng)前文章:vb.net接口繼承 接口繼承接口用什么關(guān)鍵字
地址分享:http://fisionsoft.com.cn/article/dogsgcg.html