实例3-2 类的实例化
该实例实现步骤如下。
1 创建窗体
在本章的项目chapter3下,右键单击该项目名下面的文件夹“类及对象”,在弹出菜单中选择“添加”→“Windows窗体”菜单命令,在弹出的对话框中输入窗体名Cl_insFrm,单击“添加”按钮完成窗体的创建。
2 添加控件
在窗体中添加两个Textbox控件,用于输入和显示用户的信息。
添加一个Label控件用于对相关信息的说明。
3 添加代码
双击该窗体进入窗体的代码编辑器窗口,向其中添加代码3-6中的代码。
代码3-6 Cl_insFrm.vb
01. Public Class Cl_insFrm 02. Private Sub TextBox1_TextChanged(ByVal sender As System.Object, _ 03. ByVal e As System.EventArgs) Handles TextBox1.TextChanged 04. Dim num As Integer = Me.TextBox1.Text '获得用户输入的数值 05. Dim sum As Int64 = 0 06. Dim i As Integer 07. Dim m As My_class '实例化类My_class 08. m = New My_class 09. For i = 1 To num '求1!+…+n!的值 10. sum = sum + m.Myfun(i) 11. Next 12. Me.TextBox2.Text = "1!+…+" + CStr(num) + "!" + "=" + CStr(sum) 13. End Sub 14. End Class 15. Public Class My_class '定义一个类名称为My_class 16. Public Function Myfun(ByVal n As Int64) As Int64 '实现求得一个数的阶乘 17. If n <= 1 Then 18. Return 1 19. Else 20. Return Myfun(n -1) * n 21. End If 22. End Function 23. End Class
代码3-6执行步骤如下:
① 第15行代码定义一个类,名称为My_class;
② 第16行到第22行代码是在My_class类中定义一个Function函数,实现求一个数的阶乘;
③ 第20行代码运用递归的方法求得一个数的阶乘;
④ 第4行代码定义一个整型变量,用来获得用户输入的数值num;
⑤ 第7行和第8行代码是实例化类My_class,方便之后调用该类中的函数;
⑥ 第9行到第11行代码是用For循环计算从1开始到num值的阶乘,并将它们相加,求得1!+…+n!(其中n为用户输入的数值)值;
⑦ 第12行代码是将所得结果显示在窗体上。
4 运行结果
按F5键,运行该程序,结果如图3-2所示。
图3-2 实例3-2运行结果
3.3.3 类成员
类中的字段、方法、属性、事件等,称为该类的成员。在VB.NET编辑器中,实例化一个类后,访问该类中的成员,只要在代码编辑器窗口中键入该类的实例(即对象)名,再键入一个点(.),系统会自动显示该对象的成员,这一点运用起来很方便。例如,如图3-3所示,在代码中调用employee对象的成员时,只需键入employee,然后输入一个点,编辑器就自动显示了该对象的成员。用户只要选择需要调用的成员即可。
图3-3 调用类成员
在调用类成员时,并不是所有的成员都可以访问,这里还涉及类成员访问权限的问题,在VB.NET中,访问是分等级的。类成员由它的访问修饰符决定它的访问限制。下面根据访问修饰符来讨论访问等级。
Public:Public类成员没有访问限制。在一个类成员前面添加Public关键字就使得它可以被随意访问。例如代码3-4中,Employee类中的PrintSalary方法就是一个Public方法,可以从工程中任何地方对它进行访问。
Private:私有的类成员只能被该类内部的其他成员访问。使用Private关键字就可以使一个类成员成为私有的。
Protected:被保护的类成员只能被该类内部和该类的派生类进行访问。使用Protected关键字就可以使类成员成为被保护的类成员。
Friend:具有Friend级访问限制的类成员只能在定义该类的程序内部使用,使用Friend关键字就能使类成员具有Friend级访问限制。
Protected Friend:这是Protected和Friend两种访问类型的组合。这些不同的访问类型使面向对象编程具有了信息隐藏能力。也就是说,可以使用这些访问类型保护不愿意让别人访问的信息。
接下来简单介绍一下类中的主要成员。
1.字段
一般把类或结构中定义的变量和常量称为字段。
字段分为静态字段、实例字段、常量和只读字段。
用修饰符static声明的字段为静态字段。不管包含该静态字段的类生成多少个对象或根本无对象,该字段都只有一个实例,静态字段不能被撤销。必须采用“类名.静态字段名”的方式引用静态字段。如果类中定义的字段不使用修饰符static,那么该字段为实例字段。每创建该类的一个对象,在对象内就创建了一个该字段实例;创建它的对象被撤销时,该字段对象也被撤销。实例字段采用“实例名.实例字段名”的方式引用。用const修饰符声明的字段为常量,常量只能在声明中初始化,以后不能再修改。用readonly修饰符声明的字段为只读字段,只读字段是特殊的实例字段,它只能在字段声明或构造函数中重新赋值,在其他任何地方都不能改变只读字段的值。
下面以实例说明字段的使用。