VB.NET的Object Oriented編程內功心法。

來源:互聯網
上載者:User

(華版)

每當我們提到Object Oriented編程時就好自然想起Class;Class又是何物?有何用處?Class只不過是用來形容對象(Object)所包容的屬性(Properties),方法(Method)和事件(Event)。除此之外,Class也描述誰能與不能訪問其屬性,方法和事件。

假設用一輛汽車來跟Class相比。那Class就是汽車的建造藍圖;而汽車也就是用此藍圖所建造出來的對象,也就是説Object是Class聲明和實例(instantiate)的對象。因為汽車擁有屬性(長,寛,顏色等等屬性),方法(啓動,停止,前往,後退等等方法)和事件(汽油將要用完,防盜系統喇叭響等等事件)。

所以在還沒開始設計一個Class時,我們應花多點時間去瞭解相關的商業問題和需求!這樣才能設計出一個完美無瑕的Class,然後應用在客戶的商業解決方案。這也反映怎樣達到重用同一個Class的源代碼在不同的方案了和節省應有得開發資源(員工,時間和金銭)。。。就是所有投資者和商家最感興趣的一個項目;世界往往就是如此殘酷。。。身為一個編程員。。。也只好默默的去接受!

好了,寫了一大堆前言。。。也應該聊一點對一個編程員最為感興趣的話題;也就是此篇隨筆的重點《VB.NET的Object Oriented編程內功心法》。何為內功心法?就是用VB.NET冩Object Oriented編程的最基本的知識,包括如何用VB.NET達到Inheritance同Polymorphism之效果;有了此基本基礎,以後要冩一個好的Class就像如虎添翼那般容易了。

內功心法一:

首先就是要寫一個最基本Class的空殻;只要緊記以下的文法就可以了,能跨出第一步。。。就有好的開始了。

Public Class ClassName

   '// ...

End Class

內功心法二:

要怎樣在Class裡聲明Data Member;但是往往每一個Data Member都會有不同的訪問範圍。也就是Public,Private或Protected都有不同的意義。比如: 

  Public 代表屬性,方法和事件是那裡都可以訪問,包括此Class的內和外。 

  Private 屬性,方法和事件只能訪問在此Class的裡面。 

  Protected 屬性,方法和事件只能訪問於Inherited的Derived Class。

Public Class ClassName

   [Public | Private | Protected] Variable As DataType   

   '// ...

End Class

內功心法三:

加添方法進Class裡面。方法(Method)可以是Sub(不回遞值數)或Function(回遞值數);有些更會有Argument,有多少個Argument(參數)就要看此方法的功能而定了。所以一般方法的Prototype就大可冩成:

Public Class ClassName

   [Public | Private | Protected] [Overloads] [Sub] MethodName (Byval Argument As DataType, ...

      '// ...

   End Sub

End Class



Public Class ClassName

   [Public | Private | Protected] [Overloads] [Function] MethodName (Byval Argument As DataType, ...) As DataType

      '// ...

      Return Value

   End Function

End Class



而Overloads關鍵字就是用來聲明多個同名稱但參數不同的函數,一般是用來減少函數命名的困憂!

內功心法四:

也就是在Class裡加添屬性(Properties)。有些屬性的值數只限於讀取而不能冩,有些就只能冩而不能讀取;但一般都是兩者兼施

Public Class ClassName

   Private VeriableName As DataType

   [Public | Private | Protected] [Property] PropertyName ( ) As DataType 

      Get

         '// ...

         Return VeriableName

      End Get

      Set (ByVal Value As DataType)

         VeriableName = Value

      End Set

   End Property

End Class



只能讀取值數的屬性:

Public Class ClassName

   Private VeriableName As DataType

   [Public | Private | Protected] [ReadOnly] [Property] PropertyName ( ) As DataType 

      Get

         '// ...

         Return VeriableName

      End Get

   End Property

End Class

只限於冩值數的屬性:

Public Class ClassName

   Private VeriableName As DataType

   

   [Public | Private | Protected] [WriteOnly] [Property] PropertyName ( ) As DataType 

      Set (ByVal Value As DataType)

         VeriableName = Value

      End Set

   End Property

End Class

內功心法五:

怎樣在Instantiate Class的同時聲明和執行某些函數,例如建立一個新的SqlConnection Object或者聲明變量等等。要達到這一點,我們就利用Class的Constructors函數了。以下就是在Class裡添加Constructor函數的prototype。

Public Class CalssName

   [Public] [Sub] New ( )

      '// ...

   End Sub

End Class

因為此是Object Oriented編程,所以也可以聲明多個不同參數的Constructor函數。但在此就跟編冩Overloads方法(Method)有點不同,那就是不需要用Overloads關鍵字來表示該函數就是Overloaded函數。

Public Class CalssName

   [Public] [Sub] New (Byval Argument As DataType)

      '// ...

   End Sub

End Class

內功心法六:

有了Contructor當然就要有Destructor嘛;世界所有物軆本來是雙雙對對。。。就連Object Oriented編程也一樣,否則就不平衡了。而Destructor函數是在系統將要釋放Object時所執行,所以一般Destructor都是用來解放在整個Object裡所用過(聲明和實例)的資源。

Public Class ClassName

   [Protected] [Overrides] [Sub] Finalize ( )

      '// ...

   End Sub 

End Class

內功心法七:

往往我們會選擇聲明Public變量方法和外界(Class與Class之間)分享其值數;但這樣共用變量是極不安全也很浪費資源(每一個Class都會聲明自己的變量)!為了更安全,更節省資源和設計一套好的流程式控制制;我們可以用Shared關鍵字去達到變量共用而又不浪費資源但又很可靠。。。也就是在多個Class的Instant裡只有一分變量的存在!Shared變量的另一好處就是不用Instantiate該Class也能使用,只需用Class的全名就可一了ClassName.Variable。

Public Class ClassName

   [Public] [Shared] Variable As DataType   

   '// ...

End Class

內功心法八:

可以在Class裡共用變量,那共用方法也一樣。只需在方法(內功心法五)的文法裡加上一個Shared關鍵字,就是那麼的簡單!但是就要緊記一個重點;Shared方法只能冩和讀取Shared變量的值數!

Public Class ClassName

   [Public] [Shared] [Sub] MethodName (Byval ArgumentAs DataType, ...

      '// ...

   End Sub

End Class



Public Class ClassName

   [Public] [Shared] [Function] MethodName (Byval Argument As DataType, ...) As DataType

      '// ...

      Return Value

   End Function

End Class

內功心法九:

我想Inheritance也應該是所有VB程式員夢寐以求的另一突破!在過去的VB6程式裡是不能真真做到這一點(也只有C/C++才能做到),現在VB.NET就把它一一的實現了。也把所有用VB的程式員帶到一個新境界。我想先講解一下何為Inheritance會對以後的Class程式設計比較有協助。

那就拿圖一來做個例子。“人物”稱為Base Class,因為它擁有每個人物應用的屬性(身高,軆重,膚色),方法(站,坐,跑,跳),事件(痛,哭,笑)。如果用此“人物”(Base Class)演變出兩個新的人物(Derived Class)而命名為“學生”和“教師”;那此演變也就叫Inheritance了。因為它把所有“人物”的基本屬性,方法和事件一一應用在兩個新人物“學生”和“教師”裡。Inheritance的好處就是可以很有效率的把Base Class的屬性,方法和事帶到Derived Class裡(沒有更改)而不需要重冩那麼浪費資源。

  

基本上當開始冩一個Class時(內功心法一)就可以用NotInheritable和MustInherit關鍵字來代表該Class是否能Inherit或者一定要Inherit才可以用(也就是該Class不能用New語法來實例);而一般Class都是默認Ineritable。

不能Inherit的Base Class:

Public [NotInheritable] BaseClassName

   '// ...

End Class

一定要Inherit才能使用的Base Class:

Public [MustInherit] BaseClassName

   '// ...

End Class

內功心法十:

Polymorphism可以説是Object Oriented編程的最高境界,它也是Inheritance(內功心法九)的另一個突破。這簡直是VB程式員的渴望啊。。。有誰不想學到此境界跟運用在每天悶鬱的工作裡!

Polymorphism有何過人之處?引起人人掙著去學呢?那就要重Inheritance裡説起了。。。我們知道在用Inheritance可以很又效率的由Base Class去演變出一個Derived Class;而不費一分一毫就能完完全全擁有Base Class的屬性,方法和事件。但是。。。但是。。。往往很多時後,現有的方法(Method)裡面的源代碼未必適合每一個Derived Class;就這樣。我們需要Polymorphism來補救了。也就是説Polymorphism使我們能夠去改冩某一個方法(Method)裡的源代碼!是不是很好完呢?

要用Polymorphism此功能,我們先要有一下兩個條件:

其一,要有一個heritable或MustInherit的Base Class。

Public [MustInherit] BaseClassName

   '// ...

End Class



其二,要又一個Overridable的方法(Method)。

Public [MustInherit] BaseClassName

   [Public] [Overridable] [Sub] MethodName (Byval Argument As DataType, ...)

      '// ...

   End Sub

   [Public] [Overridable] [Function] MethodName (Byval Argument As DataType, ...) As DataType

      '// ...

      Return Value

   End Function

End Class

有了所説的兩點,那就可以開始Polymorphism所的方法;只需稍微加添Overrides關鍵字來表示該方法(Method)是一個Overrided方法(Method)就可以了。

Public [MustInherit] BaseClassName

   [Public] [Overrides] [Sub] MethodName (Byval Argument As DataType, ...)

      '// ...

   End Sub

   [Public] [Overrides] [Function] MethodName (Byval Argument As DataType, ...) As DataType

      '// ...

      Return Value

   End Function

End Class



雖然不是聊的很深,當你讀完這十項內功心法也希望對你日常編冩程式稍微有協助。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.