Visual Basic.NET+SQL Server全程指南
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

实例3-6 类的封装性

该实例实现步骤如下。

1 创建模块

在本章的项目chapter3下,右键单击该项目名下面的文件夹“类及对象”,在弹出菜单中选择“添加”→“模块”菜单命令,在弹出的对话框中输入模块名称EncapsulationModule,单击“添加”按钮完成模块的创建。

2 添加代码

本实例由一个模块组成,名称为EncapsulationModule.vb。

双击EncapsulationModule.vb进入该模块的代码编辑窗口,向其中添加代码3-11中的代码。

代码3-11 EncapsulationModule.vb

        01. Class Employee
        02.     Dim a As String
        03.     Dim b As String
        04.     Public Property Fa() '类的属性
        05.         Get
        06.             Return a
        07.         End Get
        08.         Set(ByVal value)
        09.             a = value
        10.         End Set
        11.     End Property
        12.     Public Property La() '类的属性
        13.         Get
        14.             Return b
        15.         End Get
        16.         Set(ByVal value)
        17.             b = value
        18.         End Set
        19.     End Property
        20.     Public ReadOnly Property Rab()'类的只读属性
        21.         Get
        22.             Return a & " " & b
        23.         End Get
        24.     End Property
        25. End Class
        26. Sub main()
        27.     Dim c As New Employee'实例化类
        28.     c.Fa = "hello"
        29.     c.La = "beijing"
        30.     System.Console.WriteLine(c.Rab)
        31. End Sub

代码3-11执行步骤如下:

① 第27行代码实例化类Employee;

② 第28行代码设置类中私有变量a的值;

③ 第29行代码设置类中私有变量b的值;

④ 第30行代码执行输出类的只读属性Rab返回的内容。

3 运行结果

按F5键,运行程序,结果如图3-7所示。

图3-7 实例3-6运行结果

2.继承

继承是指一种基于已经存在的类创建新类的能力。继承可以实现代码的复用,子类从父类中继承各种特征,要是添加自己的类成员,就可以形成新的类。创建继承类就可以创建一个扩充了原有类的新类,后创建的类可以称为子类或派生类,原来的类可以被称为基础类或父类。扩充类的过程称为扩展,有时术语subclass或inherit用于描述扩展类的行为。在VB.NET中一个类只能有一个父类,多个父类的情况是不允许的。

在语法构成上,声明一个扩展类在类名后面使用冒号,冒号后面使用Inherits和父类名,例如,扩展类Employee创建一个新类Manager,如代码3-12所示。

代码3-12扩展类Employee

        Class Employee
            Dim salary As Decimal = 40000
            Dim yearlyBonus As Decimal = 4000
            Public Sub PrintSalary()
                '输出salary的值
                Console.Write(salary)
            End Sub
        End Class
        Class Manager : Inherits Employee
        End Class

如果关键字Inherits显示在下一行,那么就不需要冒号,如代码3-13所示。

代码3-13 Inherits显示在下一行

        Class Manager
            Inherits Employee
        End Class

下面实现初始化一个Manager对象,使用Manager对象中的成员,如代码3-14所示。

代码3-14初始化Manager对象

        Class Employee
            Dim salary As Decimal = 40000
            Dim yearlyBonus As Decimal = 4000
            Public Sub PrintSalary()
                '输出salary的值
                Console.Write(salary)
            End Sub
        End Class
        Class Manager : Inherits Employee'继承Employee类
        End Class
        Public Sub Main()
            Dim manager As Manager
            manager = New Manager()
            manager.PrintSalary()'调用Employee类中成员
        End Sub

下面的代码3-15中显示了在Manager类中添加一个新方法PrintBonus。

代码3-15在Manager类中添加方法

        Class Manager : Inherits Employee
            Public Sub PrintBonus()
                Console.Write(yearlyBonus)
            End Sub
        End Class

注意

成员访问限制的使用,比如在代码 3-15 中继承代码 3-12 中的Employee类时会出现错误,原因是在Employee类中定义的yearlyBonus是私有变量,Manager类不能访问它。

继承只是一个普通的事件。事实上,.NET Framework类库由不同层次的类组成,它们分别继承于其他的类。比如,Windows.Forms名字空间中的Button类是ButtonBase类的子类,而ButtonBase类本身又是Control类的子类,所有类最终都以System.Object作为它们的根,在.NET Framework类库中System.Object又称为根或超类。

例如下面的代码,该代码示范了继承的强大能力。

        Public Class MyForm : Inherits System.Windows.Forms.Form
        End Class

声明的这个空白类,经编译执行后生成一个Windows表单,只要运行代码就可以创建一个表单,这是因为MyForm继承于System.Windows.Forms.Form,因而也继承了Form的功能。

下面以实例说明类的继承。