程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> Visual Basic語言 >> VB.NET >> vb.net的面向對象性

vb.net的面向對象性

編輯:VB.NET

在vb的早期版本(1.0-3.0)並沒有包括面向對象的功能,從Vb 4.0開始,用戶可以象建立一個新的窗體一樣建立一個新的類,並把它作為一個新的對象.但還只能稱是半面向對象的編程語言。而Vb.net是真正意義上的完全面向對象的編程語言。本文將從Vb開始一直到Vb.net,介紹面向對象的一些基礎知識。

Visual Basic中處理的任何事物幾乎都和對象有關系,如果您對面向對象編程沒有認識,則需要建立以下一些概念。
對象是一些把屬性(Properties)、字段(fileds)、方法(methods)和事件(event)作為一個單獨的數據類型進行處理的實體。對象可以使用戶只需首先聲明一些變量和方法以後,在感覺需要使用的時候,調用一個它的對象進行重用就可以了。
例如想保存一輛汽車的信息,就可以通過定義一些變量來描述一輛車的顏色和馬力,但問題是,這個變量只是描述這一輛汽車的參數,如果又要描述另一輛汽車的參數的話,則又要定義一些其他變量來存儲這些信息。如果使用類,就可以解決這個問題,只需要定義一個通用的汽車的類,每當需要描述一輛汽車的時候只需定義一個對象就可以了,這樣就達到了代碼重用的目的。
類描述了對象的字段、屬性、方法以及對象的事件,對象是類的一個實例。在定義了一個類後,可以在需要的時候定義很多對象。
1.字段,屬性,方法和事件
類是由屬性,字段,方法和事件組成的,字段就是一個對象含有的片斷的信息。用戶可以象使用變量一樣使用屬性來存儲一些信息。例如,一個對象名叫“Car”,其中有一個字段名為“Color”,下面的代碼就是顯示怎樣改變“Color”字段的值的:
Car.Color="Blue"
屬性的檢索和設置與字段相似,但是它們在類中是以"Property Get"和"Property Set"過程來定義的。
方法表示了類可以做的一些事情,例如Car對象可以有StartEngine,Drive和Stop方法。
事件是表示一個對象從外部得到的信息的一個標示,事件允許對象任何時候在事件調用的時候做出相應的動作。例如,類Car的一個事件可以是Check_Engine。因為微軟的Windows是一個事件驅動的系統,所以事件可能會來自於任何一個地方。比如,用戶點擊鍵盤或鼠標時,就是觸發了一個事件。當然,一些事件的觸發可能來自於其他的對象。
2.封裝,繼承和多態
屬性,方法和事件只是面向對象編程的部分概念,真正的面向對象編程需要對象滿足和支持下面三個特性:封裝性,繼承性和多態性。
封裝性表示一個對象的屬性和方法。對外界而言,是不能直接訪問的。而對象本身對於屬性和方法具有絕對的控制,比如一個對象可以在屬性允許變化之前確認一下變量的值。
繼承性表示可以在一個類的基礎上建立一個新類。派生類,也就是繼承類,可以具有基本類的所有屬性、方法和事件,並且可以加上一些其他的屬性和方法,例如可以根據基本類Car建立一個新類SUV。SUv類可以從Car類中繼承Color屬性,而且還可以加上一些其他的屬性例如:FourWheelDrive。
多態性是指一些不同的類可以建立一個具有相同名稱的屬性或者方法。多態性對於面向對象編程是非常重要的,因為它可以使用戶不論在什麼時候,也不論用戶正在處理什麼對象,都可以調用這個具有共同名稱的方法。例如有一個基本類Car,多態性可以允許它的派生類具有不同定義的StartEngine方法,派生類DieselCar的StartEngine方法可能和基本類的StartEngine方法完全不一樣,但是也可以調用的。當然,其他的方法或者屬性也可以這樣處理。
類是面向對象的基礎。類和Type數據結構的區別在於,Type數據結構只有數據成員,而類的成員包括數據成員、屬性和方法。類就是一個沒有圖形界面的ActiveX控件,用戶可以使用它,但不能看到它。在vb.net以前的版本中,類不能繼承,但在.Net版本中,實現了類的繼承。用戶可以通過以下的描述來比較類和Type數據結構的區別。
Structures是一個把一些相關的數據歸類的強有力的工具,如:一個用戶定義的一個名為udtAccount的數據類型:

Public Type udtAccount
      Number As Long
Type As Byte
CustomerName AS String
Balance As Double
End Type

用戶可以申明一個udtAccount類型的一個實例,然後設置裡面字段的值,把整個記錄打印出來,把存到數據庫中等操作。
雖然Structures類型設置的功能很強大,但是在代碼中,Structures可能會帶來一些問題。用戶可能建立一個Withdrawal過程,但在Withdrawal超過了它的平衡點的時候會產生錯誤,而且也沒有辦法阻止程序的其他地方改變Balance字段。
換一句話說,操作過程和Structures的聯系靠的只是一些規定、人為的記憶以及程序員對代碼維護知識的了解。
而面向對象編程就可以解決這個問題,它把數據和操作過程結合在一起,並且組成一個獨立的實體。用戶定義Account為一個類來代替udtAccount Structure時,這些數據都變成了私有遙,而且那些訪問這些數據的操作過程也被定義為這個類的一部分,成為了這個類的屬性和方法,這就是所謂的封裝性,也就是說一個對象就是一個包含數據和操作的單元。
當用戶通過一個類建立一個Account對象時,就可以避免這種錯誤,用戶只能通過這個對象的屬性才能訪問它的一些數據字段,下面的代碼片斷顯示了Account類中的過程怎樣支持封裝性:

'The account balance is hidden from outside code.
Private mdblBalance As Double
'The read-only Balance property allows outside code
'to find out the account balance
Public Property Get Balance() As Double
     Balance=mdblBalance
End Properyt
'The Withdrawal method Changes the account balance
'but only if an overdraft error doesn't occur
Public Sub Withdrawal(ByVal Amount As Double)
    If Amount>Balance Then
       Err.Raise Number=VBObjectError+2081._
       Description:="Overdraft"
    End If
    mdblBalance=mdblBalance-Amount
End Sub

用戶並不需要擔心如何使用類中的操作過程,也不必擔心屬性、過程、私有變量的一此語法,最重要的就是記住,用戶可以定義一個類來封裝自己的數據和操作方法。
用戶也不必要擔心是否使用權了正確的對Account的操作,因為這些操作現在也被包含在對象之中了。
類在vb.net中是一個非常重要的部分,幾乎所有正規的程序都包括了一個或者幾個類,在vb.net中,類模塊和窗體的區別已經不存在了,幾乎所有的程序都是由類組成的,為了更好地使用這些類,它們被按照不同的功能分在不同的功能類庫裡。
除去這些表面現象,這些類庫都是在獨立的DLL動態庫裡,用戶只需要用Imports說明就可以引用它們了,這樣這些類裡面的函數就可以用了,如:

Import System.Collections 'Use Collection namespace classes

邏輯上,每一個類庫代表了一個獨立的命名空間(namespace),當用戶引用了一個命名空間後,編譯器將可以找到這些命名空間所對應的類和方法。最常用的命名空間是"System"命名空間,它是一個缺省的引用,並不需要用戶去申明它,其中包括了一些用戶訪問最基本的類和方法,如:Application,Arry,Console,Exception,Object以及一些基本的標准的對象,如:Byte,Boolean,Single,Double,String。在下面的最簡單的控制台程序中,我們可以看一看關於System的引用:

Imports System
'Simple Vb Hello World program
Public Class cMain
    shared sub Main() '表明啟動函數是Main
          '在控制台中寫文本
          Console.WriteLine("Hello Vb World")
    End Sub
End Class

上面的程序只是在DOS窗體中寫了一句文本"Hello Vb World",程序必須以Sub Main子例程開始啟動,而且在類模塊中,它必須聲明為"shared",而在vb.net中這個程序則應該寫成:

'simple Vb Hello World Program
Public Module cMain
   Sub Main()
       Console.WriteLine("Hello Vb World")
   End Sub
End Module

在上面這兩個例子中,除了在類模塊中,Sub Main被聲明為"Share"。讀者可以看出它們是很相象的,在Vb.net中模塊和早期的版本的vb中的模塊的作用相似,在模塊中聲明的方法和常量在整個程序中都是公有的。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved