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

实例3-13 使用Dispose和Finalize释放资源

该实例实现步骤如下。

1 创建模块

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

2 添加代码

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

代码3-22 ReleaseModule.vb

        01. Module ReleaseModule
        02.     Public Class BaseClass
        03.         Sub New() '显式声明该类的构造函数
        04.             Console.WriteLine("The base class is initializing with Sub
    New.")
        05.         End Sub
        06.         Protected Overrides Sub Finalize() '声明该类的析构函数
        07.             Console.WriteLine("The base class is destroying objects with
    Sub Finalize.")
        08.             '此处进行一些内存清理工作
        09.             MyBase.Finalize()
        10.         End Sub
        11.     End Class
        12.     Public Class ThisClass
        13.         Inherits BaseClass ' 继承类BaseClass
        14.         '定义一种释放分配的非托管资源的方法
        15.         Implements IDisposable '实现IDisposable接口
        16.         Private m_PropertyValue As Integer
        17.         Sub New(ByVal SomeValue As Integer) '定义带参数的构造函数
        18.             MyBase.New() '调用基类的构造函数
        19.             Console.WriteLine("Sub   New   is   initializing   the   class
    ThisClass.")
        20.             m_PropertyValue = SomeValue
        21.         End Sub
        22.         Property ThisProperty() As Integer '定义该类的属性
        23.             Get '设置或检索整型变量的值
        24.                 ThisProperty = m_PropertyValue
        25.             End Get
        26.             Set(ByVal Value As Integer)
        27.                 m_PropertyValue = Value
        28.             End Set
        29.         End Property
        30.         Sub DoSomething() '定义一个方法
        31.             Console.WriteLine("Place code here that does some task.")
        32.         End Sub
        33.         Protected Overrides Sub Finalize() '声明该类的析构函数
        34.             Console.WriteLine("Finalize    is   destroying   objects   in
    ThisClass.")
        35.             '此处进行一些内存清理工作
        36.             MyBase.Finalize()
        37.         End Sub
        38.         Overridable Sub Dispose() Implements IDisposable.Dispose
        39.             '此处进行一些清除工作
        40.             Console.WriteLine("The ThisClass is running Dispose.")
        41.         End Sub
        42.     End Class
        43.     Sub main()
        44.         Dim X As Integer = 6
        45.         Dim AnObject As New ThisClass(X)
        46.         AnObject.DoSomething() '调用派生类的方法
        47.             Console.WriteLine("The   value   of   ThisProperty   after   being
    initialized by the constructor is " & AnObject.ThisProperty) '输出派生类的属性值
        48.             AnObject.Dispose() '调用Dispose()方法释放资源
        49.         End Sub
        50. End Module

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

① 第2行到第11行代码定义一个类BaseClass,其中第3行到第5行代码显式声明该类的构造函数,用于输出一个字符串;第6行到10行代码声明该类的析构函数,显示相关信息;

② 第12行到第42行代码定义一个类ThisClass,继承类BaseClass;

③ 第15行代码定义实现IDisposable接口;

④ 第17行到第21行代码声明该类带参数的构造函数,首先调用基类的构造函数,接着输出一个字符串,然后将参数赋给在第16行代码定义的整型变量;

⑤ 第22行到第29行代码定义该类的属性设置或检索整型变量的值;

⑥ 第30行到第32行代码定义一个DoSomething()方法用于实现输出一个字符串;

⑦ 第33行到第37行代码声明该类的析构函数,显示一个字符串,进行一些内存清理工作;

⑧ 第38行到第41行代码定义该类的Dispose()方法即时清理资源,输出一个字符串;

⑨ 第43行到第49行代码为main函数,其中第45行代码实例化派生类;第46行代码调用派生类的DoSomething()方法;第47 行代码输出派生类的属性值;第48 行代码调用Dispose()方法释放资源。

3 运行结果

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

图3-14 实例3-13运行结果