分享
 
 
 

Henry的VB.NET之旅(三)—共享成员

王朝vb·作者佚名  2006-01-08
窄屏简体版  字體: |||超大  

Henry的VB.NET之旅(三)—共享成员

韩睿

我开始佩服起大李来了,同时对VB.NET充满了好奇与了解的渴望。

“除了全局变量外,还有什么好办法吗?”我迫不急待地想知道结果。

“可以使用共享成员。”大李依然是那么淡淡然,“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() '创建了类的第二个实例.

Shared1.SharedValue = "Share Value 1" '给共享字段赋值.

Shared2.SharedValue = "Share Value 2" ' 重写共享字段的值

ShareClass.ShareMethod() '不用创建实例就可以调用类的方法.

End Sub

“有两个要点,一个是共享成员如果是方法或属性,我们不用创建实例就可以直接用‘类名.共享成员’的方法进行调用;第二个要点,共享字段是唯一的,你来说说运行后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中的代码

Form2中的代码

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

Me.Hide()

Form2.DefInstance.Show()

End Sub

Private Sub Button1_Click(ByVal sender As _

System.Object, ByVal e As System.EventArgs) _

Handles Button1.Click

Me.Hide()

Form1.DefInstance.Show()

End Sub

Private Sub Form2_Closing(ByVal sender As Object,_

ByVal e As System.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了。

---------------------------------------------------------------

声明:本文版权与解释权归韩睿所有,如需转载,请保留完整的内容及此声明。

QQ: 18349592

E-Mail: henry7685@hotmail.com

请访问本人专栏:http://www.csdn.net/develop/author/netauthor/Latitude/

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有