打印本文 打印本文 关闭窗口 关闭窗口
VB.Net中文教程(4) 类别继承(Inheritance)关系
作者:武汉SEO闵涛  文章来源:敏韬网  点击数4675  更新时间:2009/4/23 19:01:08  文章录入:mintao  责任编辑:mintao
a.display()
        a.close()
    End Sub
End Class

(2) 环境改变了﹐必须修正旧类别。
    例如﹕软件内含Sales 类别如下──

''''ex11.bas
Imports System.ComponentModel
Imports System.Drawing
Imports System.WinForms
''''----------------------------------------------------------------------------------
Class Sales
    Protected sum As Double
    Public Sub New()
        sum = 0
    End Sub
    Public Overridable Sub input(ByVal amount As Double)
        sum = sum + amount
    End Sub
    Public Sub display()
        Messagebox.Show("The Sum Is: " + str(sum))
    End Sub
End Class
''''-----------------------------------------------------------------------------------
Public Class Form1
    Inherits System.WinForms.Form
   
    Public Sub New()
        MyBase.New()
        Form1 = Me
        ''''This call is required by the Win Form Designer.
        InitializeComponent()
        ''''TODO: Add any initialization after the InitializeComponent() call
    End Sub
    ''''Form overrides dispose to clean up the component list.
    Public Overrides Sub Dispose()
        MyBase.Dispose()
        components.Dispose()
    End Sub
#Region " Windows Form Designer generated code "
     ........
#End Region
    Protected Sub Form1_Click( ByVal sender As Object, ByVal
                            e As System.EventArgs)
        Dim x As New Sales()
        x.input(3000.5)
        x.input(7999.5)
        x.input(15000)
        x.display()
    End Sub
End Class

此程序输出如下﹕The Sum Is: 26000

input() 输入销售金额﹐且将金额加总起来﹐存于 sum变量中。display() 显示出总金额。随着企业之成长﹐往往对软件之功能有新的需求。例如﹕希望程序输出平均销售额。此时﹐必须更新原来的软件﹐其方法有二﹕

(I) 改写 Sales类别之定义。
    此为传统软件之维护方法﹐就像一座房屋﹐已不敷使用﹐于是用推土机推掉﹐重建之。通常这种方法并不佳﹐原因是﹕旧的软件有些功能仍然可用﹐废弃重建实在可惜。若不想重建﹐只想去修改它﹐但是软件若很庞大﹐得浪费人力去了解旧软件的结构﹐弄通了之后﹐才能加以修正﹐显然不经济。进一步想﹐于修正之过程中﹐不经意而更动旧软件内仍可用之部分﹐则原来正确之功能﹐反而有遭破坏之虞﹗
(II) 藉继承关系修正 Sales类别。
    亦即定义 Sales之子类别﹐来修正及扩充 Sales之功能。此时﹐并未更动Sales 类别之定义﹐所以不会破坏 Sales之功能。既然保存原有的良好功能﹐又能增加新的功能﹐岂非两全其美呢﹖此「旧干发新枝」之景象即是千年神木得以茁壮且绿意盎然之道理﹐也正是 OOP魅力的源头。现在﹐就为 Sales定义个子类别叫 Sales_new如下﹕

''''ex12.bas
Imports System.ComponentModel
Imports System.Drawing
Imports System.WinForms
''''------------------------------------------------------------------------------------
Class Sales
    Protected sum As Double
    Public Sub New()
        sum = 0
    End Sub
    Public Overridable Sub input(ByVal amount As Double)
        sum = sum + amount
    End Sub
    Public Sub display()
        Messagebox.Show("The Sum Is: " + str(sum))
    End Sub
End Class

Class Sales_new
    Inherits Sales
   
    Protected number As Integer
    Public Sub New()
        number = 0
    End Sub
    Public Overrides Sub input(ByVal amount As Double)
        MyBase.input(amount)
        number = number + 1
    End Sub
    Public Sub display_average()
        Dim avg As Double
        If number > 0 Then
            avg = sum / number
            MessageBox.Show("The Average Is : " + str(avg))
        End If
    End Sub
End Class
''''------------------------------------------------------------------------------------
Public Class Form1
    Inherits System.WinForms.Form
   
    Public Sub New()
        MyBase.New()
        Form1 = Me
        ''''This call is required by the Win Form Designer.
        InitializeComponent()
        ''''TODO: Add any initialization after the InitializeComponent() call
    End Sub
    ''''Form overrides dispose to clean up the component list.
    Public Overrides Sub Dispose()
        MyBase.Dispose()
        components.Dispose()
    End Sub
#Region " Windows Form Designer generated code "
      .......
#End Region
    Protected Sub Form1_Click( ByVal sender As Object, ByVal
                            e As System.EventArgs)
        Dim x As New Sales_new()
        x.input(3005.5)
        x.input(5994.5)
        x.input(15012.6)
        x.display()
        x.display_average()
    End Sub
End Class


此程序输出﹕
           The Sum Is: 24012.6
           The Average Is: 8004.2

    子类别增加了新数据项number﹐重新定义了input()﹐使新input()保存父类别内之input()功能﹐并加上number = number +1之运算。保留了父类别之display()﹐但增加了display_average()程序。依此方法﹐软件自然日益茁壮﹐且历久弥新﹗藉继承关系不断扩充乃为OOP之重要技术﹐盼您善用之。n

 


 

上一页  [1] [2] [3] [4] [5] [6] 

打印本文 打印本文 关闭窗口 关闭窗口