| MyBase 关键字的行为类似于引用类的当前实例的基类的对象变量。MyBase 常用于访问在派生类中被重写或隐藏的基类成员。
在上述代码中,MyBase指的当然就是System.Windows.Forms.Form类了。
从而我们可以知道,在sub new中声明的mybase.new意图在于在form3构造时继承下System.Windows.Forms.Form类的初始化内容。同样的MyBase.dispose的作用在于利用基类System.Windows.Forms.Form的析构方法来进行析构。
总结一下,现在的窗体是一个确确实实的类了,我们应该换个眼光来看待vb.net中的form了。忘掉那个vb中的form用法吧,它只不过是System.Windows.Forms.Form类的一个实例呀。
那么,回到开头的问题,怎么样来在vb.net中实现在Form1中调用Form2的功能呢?只要把类引用到实例就可以了:
Dim frm2 As New Form2() ‘定义Form2类的一个实例
frm2.Show() ‘通过实例去调用类的方法,同样不讨论模式问题
是不是很简单,那么我再简单引申一下,当我们声明frm2时用到了New,自然是利用form2类中的sub new来构造这个frm2。那么我们在哪里来调用dispose来析构new出来的frm2呢?
Form.Dispose方法是重写自Control.Dispose方法的,那么Control.Dispose方法的含义又是怎么样的?它的作用就是:释放由Control占用的非托管资源,还可以另外再释放托管资源。当它参数中的[Visual Basic]
disposing 为 true 则释放托管资源和非托管资源;为 false 则仅释放非托管资源。 Form类的disposing为true。
在关闭窗体时自动调用dispose的功能是得益于.net的公共语言运行库,运行库自动处理对象布局和管理对对象的引用,当不再使用对象时释放它们。其生存期以这种方式来管理的对象称为托管数据。自动内存管理消除了内存泄漏以及其他一些常见的编程错误。当然它也不是万能的,这不是本文讨论的重点,先按下不表。
任何类型的 Dispose 方法都应该释放它拥有的所有资源。它还应该通过调用其父类型的 Dispose 方法释放其基类型拥有的所有资源。该父类型的 Dispose 方法应该释放它拥有的所有资源并同样也调用其父类型的 Dispose 方法,从而在整个基类型层次结构中传播该模式。要确保始终正确地清理资源,Dispose 方法应该可以被多次安全调用而不引发任何异常。
当我们关闭一个窗口的时候,会发出一个终止响应,并将该窗口对象(就象上面定义的frm2)送入终止队列,公共语言运行库的垃圾回收器跟踪着这个对象的生存期,此时就会调用此对象基类(比如Form2)的Dispose方法,用于销毁对象并收回资源。
如果通过Dispose还释放不干净或没有调用Dispose,系统的垃圾回收器会调用对象的 Finalize 方法进行清除。由于执行 Finalize 方法会大大减损性能,所以我们不会一开始就用它去进行清除工作。
通过这一小节,希望您已经建立起一个概念,vb.net中连窗口都成了一个实实在在的类,而且提供了一整套完整的类的解决方案,一改vb6中不能实现类继承的缺陷。下一节中,我们将开始进行多窗体编程的讨论。
----
声明:本文版权与解释权归韩睿所有,如需转载,请保留完整的内容及此声明。
QQ: 18349592
上一页 [1] [2] |