《Visual Basic .NET軟件開發(fā)技術》課件第5章 在Visual Basic.NET中實現(xiàn)面向對象編程_第1頁
《Visual Basic .NET軟件開發(fā)技術》課件第5章 在Visual Basic.NET中實現(xiàn)面向對象編程_第2頁
《Visual Basic .NET軟件開發(fā)技術》課件第5章 在Visual Basic.NET中實現(xiàn)面向對象編程_第3頁
《Visual Basic .NET軟件開發(fā)技術》課件第5章 在Visual Basic.NET中實現(xiàn)面向對象編程_第4頁
《Visual Basic .NET軟件開發(fā)技術》課件第5章 在Visual Basic.NET中實現(xiàn)面向對象編程_第5頁
已閱讀5頁,還剩45頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

第一單元面向對象的基本概念類類就是對具有相同數(shù)據(jù)和相同操作的一組相似對象的定義,也就是說,類是對具有相同特性和行為的一個或多個對象的描述。有了類這個概念之后,我們就可以實現(xiàn)面向對象編程4個關鍵的組成部分:抽象、封裝、繼承和多態(tài)了。對象與類對應的就是實例了,實例就是由某個特定的類所描述的一個具體的對象?!皩ο笫穷惖膶嵗?,類是有公共特性的對象的抽象?!弊侄巍傩?、方法和事件類由字段、屬性、方法和事件組成,字段、屬性、方法和事件都是對象的成員。字段表示對象包含的信息。屬性也是用來表示對象包含的信息,屬性與字段很類似。方法表示對象可執(zhí)行的操作。事件是對象從其他對象或應用程序接收的通知,或者是對象傳輸?shù)狡渌麑ο蠡驊贸绦虻耐ㄖ?。封裝、繼承和多態(tài)“封裝”意味著將一組相關屬性、方法和其他成員視為一個單元或對象。換一句話來說,封裝實際上就是將類的數(shù)據(jù)隱藏起來,控制用戶對類的修改和訪問數(shù)據(jù)的程度?!袄^承”描述了基于現(xiàn)有類創(chuàng)建新類的能力。新類繼承基類的所有屬性、方法和事件,而且還可以在該新類中添加其他屬性和方法。利用多態(tài)性性,可以根據(jù)調用方法的對象在運行時類型的不同,達到可以使用同一個方法名處理不同的操作的效果。第二單元在VB.NET中創(chuàng)建類使用Class關鍵字可以創(chuàng)建一個類;類里面可以包含字段、屬性、方法和事件。舉例說明如下,定義一個類,用于描述一個學生的信息,如姓名、成績等:PublicClassStudentClassPublicnameAsStringPrivatescoreAsSinglePublicSubinputScore(ByValsngScoreAsSingle)IfsngScore>=0AndsngScore<100Thenscore=sngScoreElseMessageBox.Show("輸入的成績不合法!")EndIfEndSub

PublicFunctionoutputScore()RETurnscoreEndFunctionEndClass

‘在窗體中新建一個Button控件,在其Click事件的處理程序中編寫如下代碼:

DimstAsNewStudentClass="張三"st.inputScore(80)DimstrTmpAsStringstrTmp=&"同學的成績是:"&st.outputScore()&"分"MessageBox.Show(strTmp)對象的創(chuàng)建和使用訪問修飾符訪問修飾符定義了類的可訪問部分和不可訪問部分之間的邊界。Property過程Property過程是用于給屬性賦值或者取屬性值的一系列代碼。類的成員變量與成員變量對應的Property過程就構成了類的屬性.VisualBasic.NET提供以下Property過程:GET過程用于返回屬性值,當在表達式中訪問屬性時調用它們。SET過程用于將屬性設置為某值,當給屬性賦值時調用它們。聲明Property過程的語法[訪問修飾符][ReadOnly\WriteOnly]Property過程名([參數(shù)列])As數(shù)據(jù)類型GET'...RETurn屬性值EndGETSET([ByValvalueAs數(shù)據(jù)類型])'...

屬性值=valueEndSETEndProperty通過Property過程,可以將屬性定義為只讀(ReadOnly)、只寫(WriteOnly)或讀/寫類型(默認值為讀/寫)。如果屬性為只讀(GET)或只寫(SET),則可以單獨定義相應的GET或SET過程之一。舉例:定義一個類,用于描述學生的信息在解決方案資源管理器中點擊右鍵,選擇“添加”->“添加類”,然后雙擊添加如下代碼:PublicClassStudentClassPrivatenumberAsStringPrivatenameAsStringPrivateageAsIntegerPrivatescoreAsSinglePublicPropertyinputScore()AsSingleGETRETurnscoreEndGETSET(ByValValueAsSingle)IfValue>=0AndValue<100Thenscore=ValueElseMessageBox.Show("輸入的成績不合法!")EndIfEndSETEndPropertyPublicSubinputStudent(ByValstrNumberAsString,ByValstrNameAsString,ByValintAgeAsInteger=0)number=strNumbername=strNameage=intAgeEndSubPublicSuboutputStudent()DimstrTmpAsStringstrTmp=number&"號"&name&"同學:"&Chr(10)strTmp+="年齡:"&age&Chr(10)strTmp+="成績:"&score&"分"MessageBox.Show(strTmp)EndSubEndClass:然后,在雙擊原有窗體的Button1控件,在其Click事件的處理程序中添加如下代碼:

DimstAsNewStudentClass‘用StudentClass類聲明一個對象

st.inputStudent("001","張三",20)st.inputScore=95st.outputStudent()構造函數(shù)構造函數(shù)是一個特殊的方法,它在類進行實例化的時候自動運行。在VB.NET中,構造函數(shù)總是命名為SubNew。舉例如下,給StudentClass類添加一個構造函數(shù),用于初始化類成員:PublicClassStudentClassPrivatenumberAsStringPrivatenameAsStringPrivateageAsIntegerPrivatescoreAsSingle

SubNew(ByValstrNumberAsString,ByValstrNameAsString,OptionalByValintAgeAsInteger=0)‘聲明一個構造函數(shù)

number=strNumbername=strNameage=intAgescore=0DimstrTmpAsStringstrTmp=name&"同學的成績是:"&score&"分"MessageBox.Show(strTmp)

EndSubEndClass有了構造函數(shù),這樣就可以確保你聲明的每一個對象的成員都是經過初始化的,避免了引用空值等錯誤。

DimstAsNewStudentClass("001","張三",18)注意:構造函數(shù)只能由對象在創(chuàng)建時自動調用,永遠不能被直接調用。共享成員要定義一個共享的字段,只需在字段名前面加上Shared關鍵字即可,除此之外,其他的要求跟普通的字段一樣。我們知道,每個類對象都有自己的類數(shù)據(jù)成員的拷貝,但是,共享字段對每個類來說只有一個拷貝,共享字段可被該類的所有對象共享訪問。

同理,使用Shared關鍵字也可以將一個方法聲明為共享方法;如果一個聲明為了共享方法,那么,無需實例化該共享方法所在的類對象也可以調用該方法。因為,在對象還沒有實例化之前,共享成員就已經存在了。調用共享方法的方式是:類名后跟一個成員運算符".",然后加上共享方法名。釋放資源雖然VB.NET對象不存在真正的析構函數(shù),但是它提供了兩個方法(Finalize和Dispose)用于釋放資源。重載所謂重載就是在一個類中用相同的名稱但是不同的參數(shù)列表創(chuàng)建一個以上的過程、構造函數(shù)或屬性。這些被重載的方法除了具有相同的方法名外,每個方法的參數(shù)數(shù)據(jù)類型、或者參數(shù)個數(shù)、或者參數(shù)數(shù)據(jù)類型的排列順序必須互不相同。在方法被調用時,計算機根據(jù)參數(shù)的不同來決定調用的到底是哪一個具體的方法。舉例PublicClassTryClass

PublicFunctionAdd(ByValNum1AsInteger,ByValNum2AsInteger)AsIntegerAdd=Num1+Num2EndFunction

PublicFunctionAdd(ByValNum1AsDouble,ByValNum2AsDouble)AsDoubleAdd=Num1+Num2EndFunction

PublicFunctionAdd(ByValNum1AsString,ByValNum2AsString)AsStringAdd=Num1&Num2EndFunctionEndClass‘聲明一個對象,調用三個重載的方法

PrivateSubButton1_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButton1.ClickDimtAsNewTryClassMessageBox.Show(t.Add(1,1))MessageBox.Show(t.Add(1.23,2.98))MessageBox.Show(t.Add("Hello","World"))EndSub第三單元VB.NET中實現(xiàn)類的繼承基本繼承在VB.NET中,子類用Inherits關鍵字來繼承一個父類?;纠^承的格式如下:訪問修飾符Class子類名

Inherits父類名…

EndClass注意,VB.NET只允許單一繼承,不允許多重繼承,即子類不能從多個父類繼承而來,它只能繼承于一個父類。阻止繼承類可以在類的聲明中加入NotInheritable關鍵字實現(xiàn)阻止繼承,這樣可以定義一個不能被子類繼承的類。稱這種類為阻止繼承類。阻止繼承類的定義格式如下:訪問修飾符NotInheritableClass類名…

EndClass當類聲明為阻止繼承時,其他類就不能夠使用Inherits關鍵字來繼承該類的屬性和方法等。重寫當子類從一個父類中繼承的時候,可以通過重寫父類成員來為子類提供一個不同的實現(xiàn),重寫允許子類使用自己的實現(xiàn)代替相同名稱的父類的成員。在VB.NET中,要實現(xiàn)重寫,就必須要在被重寫的父類成員前面添加Overridable關鍵字,在重寫的子類成員前面添加Overrides關鍵字。要注意,重寫的成員必須具有相同的名稱、相同的返回值類型、相同的參數(shù)數(shù)據(jù)類型、參數(shù)個數(shù)和參數(shù)排列順序,否則,不能使用重寫。而且,不能重寫字段、常量或者共享成員。

覆蓋因為重寫有嚴格的要求,重寫的成員必須具有相同的名稱、相同的返回值類型、相同的參數(shù)數(shù)據(jù)類型、參數(shù)個數(shù)和參數(shù)排列順序。但有時候,我們確實不能遵循該規(guī)則,這怎么辦呢?這時候,我們可以通過覆蓋來隱藏父類成員的實現(xiàn),而用一個全新的子類成員來代替它。覆蓋與重寫不同,無論被覆蓋的成員的參數(shù)如何,無論被覆蓋的成員是否有多個重載,只要父類中的成員與子類中含Shadows關鍵字的成員同名,那么父類中所有同名的成員都會被隱藏掉。在VB.NET中,可以使用Shadows關鍵字來實現(xiàn)覆蓋。重載繼承成員事實上,除了在同一個類中可以實現(xiàn)重載外,在繼承的時候也可以實現(xiàn)重載。當子類從一個父類中繼承的時候,可以通過重載繼承成員的方式在子類中擴展父類成員的實現(xiàn)。對于子類來說,重載繼承成員與在同一個類中實現(xiàn)重載很相似,重載的成員除了具有相同的名稱外,每個成員的參數(shù)數(shù)據(jù)類型、或者參數(shù)個數(shù)、或者參數(shù)的排列順序必須互不相同。在VB.NET中,要重載繼承成員,只需在重載的子類成員前面添加Overloads關鍵字即可。注意:但是,當子類中重載的成員與父類中被重載的成員具有相同的名稱和參數(shù)列表,即參數(shù)數(shù)據(jù)類型、參數(shù)個數(shù)、參數(shù)的排列順序都一樣,那么,父類中的成員就會被子類中的成員覆蓋。繼承中的構造函數(shù)在VB.NET中,子類可以用Inherits關鍵字來繼承一個父類。如果父類沒有構造函數(shù)或者有一個不帶參數(shù)的構造函數(shù),那么,在繼承的子類中就不需要嚴格地為子類定義一個顯式的構造函數(shù)。但是,構造函數(shù)并不是普通的方法,子類并不能直接地繼承父類的構造函數(shù)。如果父類中有構造函數(shù)且所有的構造函數(shù)都帶有參數(shù),那么,我們就必須要在子類中定義一個顯式的構造函數(shù),以便繼承父類的構造函數(shù)。

如果父類中有構造函數(shù)且所有的構造函數(shù)都帶有參數(shù),那么,我們就必須要在子類中定義一個顯式的構造函數(shù),并且,該子類中的構造函數(shù)的第一行可執(zhí)行語句必須是對父類構造函數(shù)的調用。例如:PublicClassNewStudentClassInheritsStudentClassSubNew(ByValintNumberAsInteger,ByValstrNameAsString,ByValsngScoreAsSingle)

MyBase.New(intNumber,strName)EndSubEndClass抽象繼承抽象繼承是在類的聲明中加入MustInherit關鍵字,用于指定該類只能用作父類,供其他類繼承,但是,無法直接創(chuàng)建該類的實例。我們稱這種類為抽象類,抽象類是一個沒有具體對象的概念類。注意,抽象類可以不提供類的具體實現(xiàn),也可以給出一部分具體實現(xiàn),或者也可以給出類所有的具體實現(xiàn)。但,無論是那一種情況,抽象類都必須靠子類來實例化,不能用抽象聲明一個具體的對象。在抽象類中,可以通過MustOverride關鍵字來聲明方法是虛擬的方法,必須在子類繼承的時候給出具體實現(xiàn)。而且,在聲明虛擬方法的時候,你只需給出方法頭即可,EndSub、EndFunction、EndProperty等必須省略。

可視繼承任何一個Form(窗體)在缺省情況下,都是從.NET中的System.Windows.Forms.Form類中繼承出來的,只要打開代碼編輯窗口即可以看到如下代碼:PublicClassForm1InheritsSystem.Windows.Forms.Form…

…EndClass其實,可視繼承就是從現(xiàn)有的可視控件(包括窗體)中繼承出新的控件(或窗體)。把父類從System.Windows.Forms.Form改為Form1,即從Form1中派生了4個子類的窗體,這4個子類的窗體擁有如同F(xiàn)orm1窗體的界面。例如:PublicClassForm2InheritsSystem.Windows.Forms.Form改為:PublicClassForm2InheritsForm1注意:如果想讓派生窗體的控件允許修改,則父窗體中的控件Modifiers屬性應設為Protected;否則,不允許修改派生窗體的控件屬性;第四單元VB.NET中實現(xiàn)接口在接口中只包含了成員的定義,并沒有給出成員的實現(xiàn),即只給出成員的名稱、所用到的參數(shù)和返回值的類型。接口的實現(xiàn),完全由實現(xiàn)接口的類來承擔,接口中不能存在任何可執(zhí)行的代碼。(一)定義接口在VB.NET中,用Interface關鍵字來定義接口,格式如下:[訪問修飾符]Interface接口名…

…EndInterface例如,定義一個空的接口IOperation:PublicInterfaceIOperation…

…EndInterface接口成員定義,我們可以放在接口的框架中,但是,不需要定義接口成員的訪問修飾符,接口的訪問修飾符決定了接口成員的方法修飾符。和定義抽象類一樣,只需給出成員頭即可,EndSub、EndFunction、EndProperty等必須省略。舉例PublicInterfaceIOperation‘定義了一個IOperation接口,在接口中定義了5個方法成員

Functionadd(ByValsngNum1AsSingle,ByValsngNum2AsSingle)AsSingleFunctionsubtract(ByValsngNum1AsSingle,ByValsngNum2AsSingle)AsSingleFunctionmultiply(ByValsngNum1AsSingle,ByValsngNum2AsSingle)AsSingleFunctiondivide(ByValsngNum1AsSingle,ByValsngNum2AsSingle)AsSingleSubalarm(ByValstrMsgAsString)EndInterface(二)實現(xiàn)接口在VB.NET中,由類用Implements關鍵字來接口,例如:PublicClassOperationClass

ImplementsIOperation…

…EndClass如果定義了一個類來實現(xiàn)某個接口,那么,該類就必須要實現(xiàn)該接口中定義的所有的接口成員。接口成員的實現(xiàn)也是用Implements關鍵字來指定。舉例‘定義了一個類OperationClass實現(xiàn)了IOperation接口及接口中的所有成員PublicClassOperationClassImplementsIOperationPublicFunctionadd(ByValsngNum1AsSingle,ByValsngNum2AsSingle)AsSingleImplementsIOperation.addadd=sngNum1+sngNum2EndFunctionPublicFunctionsubtract(ByValsngNum1AsSingle,ByValsngNum2AsSingle)AsSingleImplementsIOperation.subtractsubtract=sngNum1-sngNum2EndFunctionPublicFunctionmultiply(ByValsngNum1AsSingle,ByValsngNum2AsSingle)AsSingleImplementsIOperation.multiplymultiply=sngNum1*sngNum2EndFunctionPublicFunctiondivide(ByValsngNum1AsSingle,ByValsngNum2AsSingle)AsSingleImplementsIOperation.dividedivide=sngNum1/sngNum2EndFunctionPublicSubararm(ByValstrMsgAsString)ImplementsIOperation.alarmMessageBox.Show("警告:"&strMsg)EndSubEndClass第五單元事件事實上,用VB.NET開發(fā)的絕大多數(shù)應用程序都是事件驅動的,即執(zhí)行流程是由外界發(fā)生的事件所確定的。所謂的事件就是一個信號,它告知應用程序有重要情況發(fā)生。例如,用戶單擊窗體上的某個按鈕時,窗體會引發(fā)一個Click事件并調用一個處理該事件的過程。聲明事件在VB.NET中,可以使用Event關鍵字在類、結構、模塊和接口內部聲明事件,格式如下所示:[訪問修飾符]Event

事件名([參數(shù)列])舉例說明,在Logger類中聲明事件如下:PublicClassLogger

EventLogAction(ByValactionNameAsString)EndClass引發(fā)事件事件就像是通告已發(fā)生重要情況的消息。廣播該消息的行為叫做引發(fā)事件。在VB.NET中,使用RaiseEvent語句引發(fā)事件,格式如下所示:RaiseEvent

事件名([參數(shù)列])必須要在聲明事件的類內引發(fā)事件。例如,子類不能引發(fā)從父類中繼承的事件。舉例說明,擴展Logger類,為其添加openFile、saveFile和closeFile方法,三個方法都會引發(fā)LogAction事件。PublicClassLogger

EventLogAction(ByValactionNameAsString)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論