“除了全局变量外还有什么好办法吗?”我迫不急待地想知道结果
“可以使用共享成员”大李依然是那么淡淡然“VB.NET现在是支持真正面向对象编程可以继承、使用多态、共享成员和静态成员共享成员就是在所有类和所定义派生类例子的间共享思路方法、属性、字段和事件所有使用类创建对象都可以访问相同数据、共享实现过程并且收到相同激发事件”
“这么好呀那如何实现呢?”我好象又回到了课堂上满脑都是无知符号
“很简单在Public或Private成员修饰符后加上Shared关键字即可了Shared关键字指示个或多个被声明编程元素将被共享共享元素不关联于某类或结构特定例子可以通过使用类名或结构名称或者类或结构特定例子变量名称限定共享元素来访问它们你来看这段代码
Public Class ShareClass
Public Shared SharedValue As String
Public Shared Sub ShareMethod
MsgBox("This is a shared method.")
End Sub
End ClassSub
TestShared
Dim Shared1 As New ShareClass ' 创建了类个例子.
Dim Shared2 As New ShareClass '创建了类第 2个例子.
Shared1.SharedValue = "Share Value 1" '给共享字段赋值.
Shared2.SharedValue = "Share Value 2" ' 重写共享字段值
ShareClass.ShareMethod '不用创建例子就可以类思路方法.
End Sub
“有两个要点个是共享成员如果是思路方法或属性我们不用创建例子就可以直接用‘类名.共享成员’思路方法进行;第 2个要点共享字段是唯你来说说运行后Shared1.SharesValue值是多少?”
我头脑里转了两圈既然说共享字段是唯那么Shared1.SharedValue和Shared2.SharedValue其实对应是同个共享字段所以么我立刻大声说:“是Share Value 2被Shared2.SharedValue修改了”
“没错!”大李又次绽放了会心微笑真是对我最高奖赏“那你还不动手修改下你?”
好!说做就做既然共享属性在其时候是不用例子化那么我最好能借助构造个共享属性来实现并且要能够判断其例子是否存在或是否被销毁如果不存在就构造个新窗体例子如果存在就对其进行:
Private Shared m_vb6FormDefInstance As Form1
Public Shared Property DefInstance As Form1
Get
If m_vb6FormDefInstance Is Nothing OrElse _
m_vb6FormDefInstance.IsDisposed Then ‘判断窗体例子是否存在
m_vb6FormDefInstance = New Form1
End If
DefInstance = m_vb6FormDefInstance
End Get
Set(ByVal Value As Form1)
m_vb6FormDefInstance = Value
End Set
End Property
在Form2中也加入相似代码只不过把Form1改为Form2它是如此方便:
//Form1中代码
Private Sub Button1_Click(ByVal sender As .Object, ByVal e As .EventArgs)
Handles Button1.Click
Me.Hide
Form2.DefInstance.Show
End Sub
//Form2中代码
Private Sub Button1_Click(ByVal sender As _
.Object, ByVal e As .EventArgs) _
Handles Button1.Click
Me.Hide
Form1.DefInstance.Show
End Sub
Private Sub Form2_Closing(ByVal sender As Object,_
ByVal e As .ComponentModel.CancelEventArgs) _
Handles MyBase.Closing
Form1.DefInstance.Show
End Sub
赶紧运行下不对呀第个窗体里文本框改为“Henry作品”后再切换仍是不见了?我疑惑地抬头看了看大李
“你再好好想想第次启动是什么?”大李模糊地说了句
“第次启动是作为主线程Form1窗体呀!”我嘟啷着说
“那么Form1.DefInstance在哪呢?”大李这句话真是惊醒梦中人呀!
我立刻动手:
Module Module1
Sub Main
Application.Run(Form1.DefInstance)
End Sub
End Module
并把Module1设为启动项目运行运行……哈哈切都如意!我开始喜欢上VB.NET了
最新评论