-
VB.NET的Object Oriented编程内功心法。
每當我們提到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
雖然不是聊的很深,當你讀完這十項内功心法也希望對你日常编冩程式稍微有帮助。
出处:https://www.cnblogs.com/hackzai/archive/2005/03/07/114417.html
假設用一輛汽車來跟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
雖然不是聊的很深,當你讀完這十項内功心法也希望對你日常编冩程式稍微有帮助。
出处:https://www.cnblogs.com/hackzai/archive/2005/03/07/114417.html
栏目列表
最新更新
nodejs爬虫
Python正则表达式完全指南
爬取豆瓣Top250图书数据
shp 地图文件批量添加字段
爬虫小试牛刀(爬取学校通知公告)
【python基础】函数-初识函数
【python基础】函数-返回值
HTTP请求:requests模块基础使用必知必会
Python初学者友好丨详解参数传递类型
如何有效管理爬虫流量?
SQL SERVER中递归
2个场景实例讲解GaussDB(DWS)基表统计信息估
常用的 SQL Server 关键字及其含义
动手分析SQL Server中的事务中使用的锁
openGauss内核分析:SQL by pass & 经典执行
一招教你如何高效批量导入与更新数据
天天写SQL,这些神奇的特性你知道吗?
openGauss内核分析:执行计划生成
[IM002]Navicat ODBC驱动器管理器 未发现数据
初入Sql Server 之 存储过程的简单使用
这是目前我见过最好的跨域解决方案!
减少回流与重绘
减少回流与重绘
如何使用KrpanoToolJS在浏览器切图
performance.now() 与 Date.now() 对比
一款纯 JS 实现的轻量化图片编辑器
关于开发 VS Code 插件遇到的 workbench.scm.
前端设计模式——观察者模式
前端设计模式——中介者模式
创建型-原型模式