每当我们提到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 属性,方法和事件只能用于Inherit的Derived Class。
Public Class ClassName
[Public | Private | Protected] Variable As DataType
'// ...
End Class
内功心法三: 加添方法进Class里面。方法(Method)可以是Sub(不回递值数)或Function(回递值数);有些更会有Arguement,有多少个Arguement(自变量串行)就要看此方法的功能而定了。所以一般方法的Prototype就大可冩成:
Public Class ClassName
[Public | Private | Protected] [Overloads] [Sub] MethodName (Byval Arguement As DataType, ...)
'// ...
End Sub
End Class
Public Class ClassName
[Public | Private | Protected] [Overloads] [Function] MethodName (Byval Arguement 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函式的语法。
Public Class CalssName
[Public] [Sub] New ( )
'// ...
End Sub
End Class
因为此是Object Oriented编程,所以也可以建立多个不同自变量的Constructor函式。但在此就跟编冩Overloads方法(Method)有点不同,那就是不需要用Overloads关键字来表示该函式就是Overloads函式。
Public Class CalssName
[Public] [Sub] New (Byval Arguement 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 ArguementAs DataType, ...)
'// ...
End Sub
End Class
Public Class ClassName
[Public] [Shared] [Function] MethodName (Byval Arguement 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)而命名为"学生"和"教师";那此演变也就叫Inheritant了。因为它把所有"人物"的基本属性,方法和事件一一应用在两个新人物"学生"和"教师"里。Inheritant的好处就是可以很有效率的把Base Class的属性,方法和事带到Derived Class里(没有更改)而不需要重冩那么浪费资源。
基本上当开始冩一个Class时(内功心法一)就可以用NotInheritable和MustInherit关键字来代表该Class是否能Inherit或者一定要Inherit才可以用(也就是该Class不能用New语法来Instantiate);而一般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此功能,我们先要有一下两个条件:
其一,要