科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道VB.NET的Object Oriented编程内功心法

VB.NET的Object Oriented编程内功心法

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

     每当我们提到Object Oriented编程时就好自然想起Class;Class又是何物?有何用处?Class只不过是用来形容Object所包容的属性(Properties),方法(Method)和事件(Event)。除此之外。

作者:builder.com.cn 2007年9月29日

关键字: 编程

  • 评论
  • 分享微博
  • 分享邮件
  
  每当我们提到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此功能,我们先要有一下两个条件:
  
  其一,要

查看本文来源

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章