实例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的功能。
下面以实例说明类的继承。