每当我们提到Object Oriented编程时就好自然想起ClassClass又是何物?有何用处?Class只不过是用来形容Object所包容的属性(Properties)方法(Method)和事件(Event)除此之外Class也描述谁能与不能执行于使用其属性方法和事件
假设用一辆汽车来跟Class相比那Class就是汽车的建造蓝图而汽车也就是用此蓝图所建造出来的实軆也就是说Object是Class宣告和建立(instantiate)的实軆因为汽车拥有属性(长寛颜色等等属性)方法(启动停止前往后退等等方法)和事件(汽油将要用完防盗系统喇叭响等等事件)
所以在还没开始设计一个Class时我们应花多点时间去了解相关的商业问题于需求!这样才能设计出一个完美无瑕的Class然后应用在客户的商业解决方案这也反映怎样达到重用同一个Class(源代码)在不同的方案了和节省应有得开发资源(员工时间和金銭)就是所有投资者和商家最感兴趣的一个项目世界往往就是如此残酷身为一个编程员也只好默默的去接受!
此篇随笔的重点《VBNET的Object Oriented编程内功心法》何为内功心法?就是用VBNET冩Object Oriented编程的最基本的知识包括如何用VBNET达到Inheritance同Polymorphism之效果有了此基本基础以后要冩一个好的Class就像如虎添翼那般容易了
内功心法一
首先就是要写一个最基本Class的空殻只要紧记以下的语法就可以了能跨出第一步就有好的开始了
Public Class ClassName
//
End Class
内功心法二
要怎样在Class里宣告Data Member但是往往每一个Data Member都会有不同的使用范围也就是PublicPrivate或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的全名就可一了ClassNameVariable
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编程员梦寐以求的另一突破!在过去的VB编程里是不能真真做到这一点(也只有C/C++才能做到)现在VBNET就把它一一的实现了也把所有用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此功能我们先要有一下两个条件
其一要