六月婷婷综合激情-六月婷婷综合-六月婷婷在线观看-六月婷婷在线-亚洲黄色在线网站-亚洲黄色在线观看网站

明輝手游網(wǎng)中心:是一個(gè)免費(fèi)提供流行視頻軟件教程、在線學(xué)習(xí)分享的學(xué)習(xí)平臺(tái)!

VB.NET中的面向?qū)ο缶幊烫卣?/h1>

[摘要]作者: 劉彥青 來(lái)源:www.ccidnet.comVisual Basic 7也被稱(chēng)作VB.NET,具備了面向?qū)ο螅∣OP)編程語(yǔ)言的所有特征。對(duì)于VB編程人員來(lái)說(shuō),面向?qū)ο蟮母拍詈兔嫦驅(qū)ο?..
作者: 劉彥青    

來(lái)源:www.ccidnet.com

Visual Basic 7也被稱(chēng)作VB.NET,具備了面向?qū)ο螅∣OP)編程語(yǔ)言的所有特征。對(duì)于VB編程人員來(lái)說(shuō),面向?qū)ο蟮母拍詈兔嫦驅(qū)ο缶幊谭绞蕉疾荒吧?br>如果問(wèn)一個(gè)面向?qū)ο蟪绦蛟O(shè)計(jì)高手什么是面向?qū)ο蟪绦蛟O(shè)計(jì)語(yǔ)言?他可能會(huì)說(shuō)出一大堆諸如類(lèi)、接口、消息隱匿、封裝、繼承、多態(tài)性這樣的名詞,這些名詞聽(tīng)起來(lái)都很酷,不是嗎?但面向?qū)ο缶幊滩⒎峭ㄟ^(guò)一兩天的學(xué)習(xí)或聽(tīng)一次課就能掌握的。要真正地掌握面向?qū)ο蟪绦蛟O(shè)計(jì),不但需要掌握一定的理論知識(shí),同時(shí)還要進(jìn)行一些實(shí)際的編程練習(xí)。本文探討了在VB.NET中運(yùn)用面向?qū)ο笤砭幊痰幕痉椒ǎ嬲撌鯲B.NET中面向?qū)ο缶幊痰闹R(shí)已經(jīng)超出本文的范圍。

面向?qū)ο缶幊痰膬?yōu)點(diǎn)
不知道讀者是否考慮過(guò)為什么現(xiàn)代程序設(shè)計(jì)語(yǔ)言會(huì)向面向?qū)ο缶幊炭繑n?C++、JAVA為什么這么普及?這是因?yàn)槊嫦驅(qū)ο缶幊叹邆淞藥讉(gè)優(yōu)點(diǎn),比如:代碼維護(hù)方便、可擴(kuò)展性好、支持代碼重用技術(shù)等等。這些優(yōu)點(diǎn)是過(guò)程編程語(yǔ)言所不具備的。下面我們就來(lái)談?wù)劽嫦驅(qū)ο蠹夹g(shù)的這些優(yōu)點(diǎn):
維護(hù)簡(jiǎn)單
模塊化是面向?qū)ο缶幊讨械囊粋(gè)特征。實(shí)體被表示為類(lèi)和同一名字空間中具有相同功能的類(lèi),我們可以在名字空間中添加一個(gè)類(lèi)而不會(huì)影響該名字空間的其他成員。
可擴(kuò)充性
面向?qū)ο缶幊虖谋举|(zhì)上支持?jǐn)U充性。如果有一個(gè)具有某種功能的類(lèi),就可以很快地?cái)U(kuò)充這個(gè)類(lèi),創(chuàng)建一個(gè)具有擴(kuò)充的功能的類(lèi)。
代碼重用
由于功能是被封裝在類(lèi)中的,并且類(lèi)是作為一個(gè)獨(dú)立實(shí)體而存在的,提供一個(gè)類(lèi)庫(kù)就非常簡(jiǎn)單了。事實(shí)上,任何一個(gè).NET Framework編程語(yǔ)言的程序員都可以使用.NET Framework類(lèi)庫(kù),.NET Framework類(lèi)庫(kù)提供了很多的功能。更令人高興的是,我們可以通過(guò)提供符合需求的類(lèi)來(lái)擴(kuò)充這些功能。
下面我們最簡(jiǎn)單的特性開(kāi)始來(lái)論述面向?qū)ο缶幊痰囊恍┨匦浴?br>類(lèi)
在面向?qū)ο缶幊碳夹g(shù)中,類(lèi)是重點(diǎn)中的重點(diǎn)。簡(jiǎn)單地說(shuō),類(lèi)是一種提供一定功能的數(shù)據(jù)類(lèi)型。在VB.NET中定義一個(gè)類(lèi)要用到關(guān)鍵字Class,例如,下面的一小段代碼就定義一個(gè)名字為Employee的類(lèi):

Employee類(lèi)
Class Employee
End Class


定義一個(gè)類(lèi)就是這么簡(jiǎn)單。注意,在對(duì)類(lèi)命名時(shí),微軟推薦使用Pascal語(yǔ)言的命名規(guī)則。根據(jù)這種命名規(guī)則,就意味著類(lèi)名的第一個(gè)字母必須大寫(xiě),并且后面的并發(fā)連結(jié)詞的第一個(gè)字母均為大寫(xiě),例如象GeneralManager、SmallDictionary、StringUtil都是合乎這種規(guī)則的類(lèi)名。

類(lèi)成員
一個(gè)類(lèi)有象域、屬性、子程序和函數(shù)這些成員,例如,下面的employee類(lèi)中有一個(gè)名字為work的子程序:

包含Work方法的Employee類(lèi)
Class Employee
Public Sub Work ()
' Do something here
End Sub
End Class


子程序和函數(shù)都被稱(chēng)為方法,方法的命名也遵循Pascal語(yǔ)言的命名規(guī)則。
另一種類(lèi)成員是域。域的命名法則遵循camel規(guī)則,即除第一個(gè)子串外的所有子串的第一個(gè)字母大寫(xiě)。象salary 和quarterlyBonus都是符合規(guī)則的域名。下面的代碼在Employee類(lèi)中添加了salary和quarterlyBonus這二個(gè)域:

增加了二個(gè)域的Employee類(lèi)
Class Employee
Dim salary As Decimal = 40000
Dim yearlyBonus As Decimal = 4000

Public Sub PrintSalary()
' print the salary to the Console
System.Console.Write(salary)
End Sub

End Class

Module Module1
Public Sub Main()

Dim anEmployee As Employee
anEmployee = New Employee()
anEmployee.PrintSalary()

End Sub
End Module


上述代碼段中的Module1模塊中提供了子程序的Main函數(shù),這也是VB.NET程序開(kāi)始的地方。要編譯源程序,就必須用一種或另一種方式提供訪問(wèn)Main Sub的途徑。
如果你使用的不是Visual Studio.NET,那么可以使用vbc.exe軟件編譯VB.NET源程序,vbc.exe 是在安裝.NET Framework時(shí)自動(dòng)安裝的。例如,當(dāng)你把源代碼保存為Employee.vb文件后,在Employee.vb所在的目錄下,輸入vbc Employee.vb即可編譯該源程序。
現(xiàn)在我們?cè)賮?lái)看看上面的代碼,子程序的Main函數(shù)首先定義了一個(gè)Employee類(lèi)型的變量━━anEmployee:
Dim anEmployee As Employee
然后使用關(guān)健詞New對(duì)Employee進(jìn)行初始化:
anEmployee = New Employee()
這樣,我們就得到了一個(gè)Employee類(lèi)型的變量,我們就可以使用它的功能了(福特汽車(chē)公司的工程師生產(chǎn)出汽車(chē)后,我們就可以啟動(dòng)并駕駛它了。)。在我們的例子中,可以使用下面的方法調(diào)用PrintSalary方法:
anEmployee.PrintSalary()
這一方法會(huì)打印Employee中salary變量的值。
當(dāng)然,我們也可以將子程序的Main函數(shù)移到類(lèi)的定義中去,這樣就無(wú)需再使用模塊了。下面的代碼即演示了這種方法:
子程序的Main函數(shù)在類(lèi)的定義中
Class Employee

Dim salary As Decimal = 40000
Dim yearlyBonus As Decimal = 4000

Public Sub PrintSalary()
' print the salary to the Console
System.Console.Write(salary)
End Sub


Public Shared Sub Main()

Dim employee As Employee
employee = New Employee()
employee.PrintSalary()

End Sub

End Class


注釋?zhuān)篜rintSalary方法中的System.Console.Write表示我們調(diào)用了Console類(lèi)中的Write方法,而Console類(lèi)又是System 名字空間的一部分。關(guān)于名字空間的要領(lǐng)將在下面的部分討論:

名字空間
在編寫(xiě).NET軟件時(shí),我們會(huì)用到類(lèi)和其他類(lèi)型。為了使應(yīng)用程序更有條理性,可以將類(lèi)組合為名字空間,微軟的.NET Framework類(lèi)庫(kù)就是這樣的。如果打開(kāi).NET Framework SDK文檔中的.NET Framework Class Library,會(huì)看到其中有80多個(gè)名字空間,需要經(jīng)常乃至的重要的名字空間包括System、System.IO、System.Drawing、 System.Windows.Forms等。例如,在Employee類(lèi)的PrintSalary方法中,我們就使用了System名字空間中的Console類(lèi)。

如果要在程序中使用名字空間,可以首先導(dǎo)入它,以便在以后每次使用其成員時(shí)無(wú)需重復(fù)該名字空間的名字。例如:可以將表4、5中的代碼改寫(xiě)為下面表6中形式:
導(dǎo)入名字空間
Imports System

Class Employee

Dim salary As Decimal = 40000
Dim yearlyBonus As Decimal = 4000

Public Sub PrintSalary()
' print the salary to the Console
Console.Write(salary)
End Sub


Public Shared Sub Main()
Dim employee As Employee
employee = New Employee()
employee.PrintSalary()
End Sub

End Class


好了,我們現(xiàn)在就可以在PrintSalary方法使用Console類(lèi)而無(wú)需引用名字空間,因?yàn)槲覀円呀?jīng)導(dǎo)入這個(gè)名字空間了。
我們還可以在不同的名字空間中擁有相同名字的類(lèi)。要正確地使用一個(gè)類(lèi),通常的做法是在一個(gè)類(lèi)的前面使用名字空間的名字。例如,可以以System.Console的方式使用System名字空間中的Console類(lèi)。

訪問(wèn)類(lèi)型
在很多情況下,我們都會(huì)將編寫(xiě)好的類(lèi)提供給別人,供他們使用它提供的功能,例如,他們可以調(diào)用類(lèi)的一個(gè)方法或者訪問(wèn)其中的一個(gè)域。面向?qū)ο缶幊痰囊粋(gè)最大的好處是開(kāi)發(fā)人員可以方便地控制對(duì)類(lèi)成員的訪問(wèn),這意味著我們可以完全控制想讓別人使用的部分。我們可以使一個(gè)方法可以被別的開(kāi)發(fā)人員使用,也可以使一個(gè)類(lèi)成員只能在該類(lèi)中被訪問(wèn)。
在VB.NET中,訪問(wèn)是分等級(jí)的。下面我們來(lái)討論這些等級(jí):

pPublic:Public類(lèi)成員沒(méi)有訪問(wèn)限制。在一個(gè)類(lèi)成員前面添加Public關(guān)健字就使得它可以被隨意訪問(wèn)。例如,Employee類(lèi)中的PrintSalary方法就是一個(gè)public方法,可以從任何地方對(duì)它進(jìn)行訪問(wèn)。
Private:秘密的類(lèi)成員只能被該類(lèi)內(nèi)部的其他成員訪問(wèn)。使用Private關(guān)健字就可以使一個(gè)類(lèi)成員成為秘密的。
Protected:被保護(hù)的類(lèi)成員只能被該類(lèi)的派生類(lèi)和該類(lèi)本身內(nèi)部進(jìn)行訪問(wèn)。使用Protected關(guān)健字就可以使類(lèi)成員成為被保護(hù)的類(lèi)成員。
Friend:具有friend級(jí)訪問(wèn)限制的類(lèi)成員只能在定義該類(lèi)的程序內(nèi)部使用,使用Friend關(guān)健字就能使類(lèi)成員具有friend級(jí)訪問(wèn)限制。
Protected friend:這是protected和friend二種訪問(wèn)類(lèi)型的組合。這些不同的訪問(wèn)類(lèi)型使面向?qū)ο缶幊叹哂辛诵畔㈦[慝能力。也就是說(shuō),我們可以使用這些訪問(wèn)類(lèi)型保護(hù)不愿意讓別人訪問(wèn)的信息。
靜態(tài)成員
我們?cè)賮?lái)看看表4、5、6中的Employee類(lèi),也許讀者會(huì)對(duì)我們沒(méi)有將System.Console類(lèi)實(shí)例化就使用它的Write有點(diǎn)不理解,為什么我們可以這樣做呢?因?yàn)樵诿嫦驅(qū)ο缶幊陶Z(yǔ)言中,有一種被稱(chēng)作靜態(tài)成員的特殊的類(lèi)成員,VB.NET也有靜態(tài)成員這一概念。
無(wú)需對(duì)一個(gè)對(duì)象實(shí)例化就可以使用其中的靜態(tài)成員。例如,下面的表7中,SalaryLevel類(lèi)中就只包含有靜態(tài)的域:
類(lèi)中的表態(tài)成員
Class SalaryLevel
Public Shared Level1 As Decimal = 35000
Public Shared Level2 As Decimal = 40000
Public Shared Level3 As Decimal = 45000
Public Shared Level4 As Decimal = 50000
Public Shared Level5 As Decimal = 55000
Public Shared Level6 As Decimal = 60000
Public Shared Level7 As Decimal = 65000
Public Shared Level8 As Decimal = 70000
Public Shared Level9 As Decimal = 75000
Public Shared Level10 As Decimal = 80000
End Class


我們可以象表8中的程序所演示的那樣在程序中使用類(lèi):
Listing 8: Using a static member of a class

Imports System

Class SalaryLevel
Public Shared Level1 As Decimal = 35000
Public Shared Level2 As Decimal = 40000
Public Shared Level3 As Decimal = 45000
Public Shared Level4 As Decimal = 50000
Public Shared Level5 As Decimal = 55000
Public Shared Level6 As Decimal = 60000
Public Shared Level7 As Decimal = 65000
Public Shared Level8 As Decimal = 70000
Public Shared Level9 As Decimal = 75000
Public Shared Level10 As Decimal = 80000
End Class

Class Employee

Dim yearlyBonus As Decimal = 4000

Public Sub PrintSalary()
' 使用SalaryLevel類(lèi)的靜態(tài)域向Console輸出工資額
Console.Write(SalaryLevel.Level4)
End Sub

Public Shared Sub Main()
Dim employee As Employee
employee = New Employee()
employee.PrintSalary()
End Sub

End Class


在Employee類(lèi)的PrintSalary方法中,我們可以在不首先創(chuàng)建SalaryLevel類(lèi)變量的情況下使用其中的靜態(tài)域Level4。不屬于靜態(tài)成員的類(lèi)成員被稱(chēng)作實(shí)例成員。

構(gòu)造器
A 構(gòu)造器是類(lèi)初始化所必須使用的特殊方法,在VB.NET中,這一方法被稱(chēng)作New。但我們?cè)谇懊娴拇a中可以發(fā)現(xiàn),在類(lèi)中我們沒(méi)有定義New這個(gè)方法。正是這樣,如果類(lèi)中沒(méi)有定義構(gòu)造器,VB.NET將自動(dòng)地創(chuàng)建一個(gè)構(gòu)造器,當(dāng)使用關(guān)健字New對(duì)對(duì)象進(jìn)行初始化時(shí),也就調(diào)用了類(lèi)的構(gòu)造器。當(dāng)然,我們也可以自己編寫(xiě)對(duì)象在初始化時(shí)所運(yùn)行的代碼。
如果我們?cè)诔绦蛑袆?chuàng)建了構(gòu)造器,VB.NET就不會(huì)再自動(dòng)為該類(lèi)創(chuàng)建構(gòu)造器了。

繼承
繼承是擴(kuò)展類(lèi)的一種特性。如果需要完成一些功能,當(dāng)然可以創(chuàng)建一個(gè)新類(lèi),但如果別人所創(chuàng)建的類(lèi)可以提供一部分你所需要的功能,就可以創(chuàng)建一個(gè)擴(kuò)充了原有類(lèi)的新類(lèi),我們創(chuàng)建的類(lèi)可以稱(chēng)為子類(lèi)或派生類(lèi),原來(lái)的類(lèi)可以被稱(chēng)為基礎(chǔ)類(lèi)或父類(lèi)。有時(shí),子類(lèi)和繼承也用于描述對(duì)類(lèi)的擴(kuò)充。在VB.NET中,一個(gè)類(lèi)只能繼承一個(gè)父類(lèi),多類(lèi)繼承在VB.NET中是不允許的。

從語(yǔ)法上說(shuō),在類(lèi)名后加一個(gè)冒號(hào),后面再加上關(guān)健字Inherits和父類(lèi)的名字就可以完成對(duì)類(lèi)的繼承。例如,下面表9中的代碼就通過(guò)擴(kuò)充Employee類(lèi)創(chuàng)建了一個(gè)被稱(chēng)為Manager的新類(lèi):
擴(kuò)充類(lèi)
Imports System

Class Employee

Dim salary As Decimal = 40000
Dim yearlyBonus As Decimal = 4000

Public Sub PrintSalary()
' print the salary to the Console
Console.Write(salary)
End Sub

End Class

Class Manager: Inherits Employee
End Class


如果關(guān)健字出現(xiàn)在下一行上,則子類(lèi)名后面的分號(hào)就不需要了,如下面的代碼所示:
Class Manager
Inherits Employee
End Class
現(xiàn)在,我們就可以初始化一個(gè)Manager對(duì)象,并使用Employee中的成員。如下面表10中的代碼所示:
初始化Manager對(duì)象
Class Employee

Public salary As Decimal = 40000
Public yearlyBonus As Decimal = 4000

Public Sub PrintSalary()
' print the salary to the Console
Console.Write(salary)
End Sub

End Class

Class Manager: Inherits Employee
End Class

Module Module1
Public Sub Main()
Dim manager As Manager
manager = New Manager()
manager.PrintSalary()
End Sub
End Module


下面表11中的代碼演示了如何通過(guò)編寫(xiě)一個(gè)新的PrintBonus方法來(lái)擴(kuò)充Manager類(lèi)別的方法:
在子類(lèi)中添加新的方法
Class Manager: Inherits Employee
Public Sub PrintBonus()
Console.Write(yearlyBonus)
End Sub
End Class


注意成員可訪問(wèn)性限制的使用。例如,如果使yearlyBonus域具有private屬性,該哉就不能被Manager類(lèi)訪問(wèn),因此,編譯這樣的代碼就會(huì)發(fā)生錯(cuò)誤。
繼承是面向?qū)ο缶幊讨谐S玫姆椒ā?shí)際上,.NETFramework類(lèi)庫(kù)中就有許多由繼承其他類(lèi)得到的類(lèi)。例如,Windows.Forms名字空間中的Button類(lèi)就是ButtonBase類(lèi)的一個(gè)子類(lèi),而B(niǎo)uttonBase類(lèi)本身又是Control類(lèi)的一個(gè)子類(lèi)。所有的類(lèi)最終都是System.Object類(lèi)的子類(lèi),在.NET Framework類(lèi)庫(kù)中,System.Object類(lèi)被稱(chēng)為根或超級(jí)類(lèi)。
表12中的代碼演示了繼承的強(qiáng)大功能:
擴(kuò)充System.Windows.Forms.Form
Public Class MyForm : Inherits System.Windows.Forms.Form
End Class


這是一個(gè)空的類(lèi)定義,在被編譯和運(yùn)行時(shí),就會(huì)顯示一個(gè)Windows窗體。看看,無(wú)需編寫(xiě)一行代碼我們就可以創(chuàng)建一個(gè)窗體,這是因?yàn)镸yForm是由System.Windows.Forms.Form繼承生成的,它繼承了Form類(lèi)的功能。
不可繼承的類(lèi)
我們可以通過(guò)使用NotInheritable關(guān)健字使自己的類(lèi)不可被別人繼承。例如,表13中的Calculator就是不可繼承的:

不可繼承的類(lèi)
NotInheritable Class Calculator
End Class


如果擴(kuò)充這個(gè)類(lèi)就會(huì)引起編譯錯(cuò)誤。為什么會(huì)使我們的類(lèi)不可繼承呢?一個(gè)原因是不希望別人擴(kuò)充我們的類(lèi),另一個(gè)原因是不可擴(kuò)充的類(lèi)產(chǎn)生的代碼運(yùn)行速度更快。盡管這樣,我們還是應(yīng)該小心地使用不可繼承的類(lèi),因?yàn)樗环厦嫦驅(qū)ο缶幊痰某踔裕挥性?00%地肯定不擴(kuò)充這個(gè)類(lèi)時(shí),才能使它不可繼承。
在有些面向?qū)ο缶幊陶Z(yǔ)言中,這些類(lèi)也被稱(chēng)作最終的類(lèi)。

結(jié)論
VB.NET支持許多面向?qū)ο缶幊痰奶卣鳌1酒恼掠懻摿薞B.NET中一些基本的面向?qū)ο筇卣鳎M軌蚴箯V大讀者能夠?qū)B.NET中面向?qū)ο缶幊烫卣饔幸粋(gè)基本的認(rèn)識(shí),并起到一個(gè)拋磚引玉的作用。


主站蜘蛛池模板: 亚洲成a人不卡在线观看 | 午夜精品视频在线观看美女 | 色婷婷精品综合久久狠狠 | 色吊丝国产永久免费网址 | 欧美在线aa| 欧美午夜精品久久久久免费视 | 性生大片一级毛片免费观看 | 日韩一区二区在线观看 | 一级女人18片毛片免费视频 | 天堂bt资源www在线 | 亚洲国产另类久久久精品小说 | 午夜成人免费影院 | 亚洲精品一二三四区 | 色妞精品一区二区 | 色噜噜色偷偷男人的天堂 | 日日干夜夜骑 | 婷婷丁香六月 | 色福利网 | 天天色天天插 | 日本高清在线观看视频你懂的 | 亚洲乱码在线视频 | 日韩 综合 | 五月天婷婷色综合 | 五月婷婷丁香在线 | 最近中文字幕免费mv视频4 | 色久视频 | 日韩伦理网站 | 天天色综合天天 | 四虎影院在线免费播放 | 日本成人免费观看 | 欧美一级特黄一片免费 | 四虎永久在线精品影院 | 香蕉在线观看999 | 一级毛片一片毛 | 天天天操天天天干 | 亚洲视频在线观看免费 | 亚洲综合亚洲综合网成人 | 三级经典三级日本三级欧美 | 日韩中文网 | 色吊丝性永久免费看码 | 人人看人人鲁狠狠高清 |