(三)—共享成员


我开始佩服起大李来了,同时对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了。

 

本文作者:



相关阅读:
CSS的color颜色使用说明
FreeBSD网站平台建设全过程 第二步
jQuery AJAX实现调用页面后台方法和web服务定义的方法分享
了解linux中Load average负载
循环取值Request.QueryString的用法
jquery text()要注意啦
需要做特殊处理的DOM元素属性的访问
SQL存储过程初探
javascript 全选/反选,取消选择效果
对于Linux系统的几个常见误解
MySQL 最基本的SQL语法/语句
javascript 一个函数对同一元素的多个事件响应
解决OracleDBConsoleorcl不能启动,报错误码
取远程linux主机的流量和tcp连接数
快速导航
PHP MySQL HTML CSS JavaScript MSSQL AJAX .NET JSP Linux Mac ASP 服务器 SQL jQuery C# C++ java Android IOS oracle MongoDB SQLite wamp 交通频道 作文范文 当我面对歌声的时候作文900字 行政管理应届毕业生求职信 论起网名 2015二季度安全教育工作总结和三季度工作安排 老公我累了 “二弦“琵琶550字 做一个茶杯女人 月色如酒书香如茶作文500字 最新小学班主任工作计划 诚实不需要表白作文1200字 初中初一作文550字:春之物语 北京的贫民 行政工作自我鉴定 想忘却难以忘怀的爱 《惜》诗歌 中央电视台之旅作文500字 雪夜赏梅 熟悉的那个人作文900字 风之颂 哭泣杂谈 200字高二入团申请书 小学六年级作文350字:寂寞 静待繁华,那些错乱年华 教师节给老师的祝福语 2016年乡镇教委上半年工作总结 狼和小羊新篇作文300字 赏油菜 王子的悲哀 结婚纪念日感动的话 生命的原野 拥有孤独 蓝玫香之语作文900字 小学六年级作文450字:一根棒棒糖 在梦找不到的地方 小学二年级作文800字:森林历险记 又是一年下半季 坚强德身后,谁能懂呢? 我的家乡梦作文600字 业务员自我评定 励志偶像剧我可能不会爱你程又青经典台词 樱花情缘(二十二)作文1300字 红五月歌手比赛闭幕式主持人串词 2012年农科所工作总结及2013年工作计划 春天来了手抄报内容:关于春天句子 朝花夕拾1200字读书笔记 高中作文技巧:好作文是改出来的 情人节男女要注意的细节 2016最伤感的句子让人想哭的句子大全 两学一做四讲四有专题党课心得体会 高中中考作文400字:我的教室

Copyright © 2016 phpStudy |