Henry的VB.NET之旅(三)—共享成员
2008-04-24 15:59
337 查看
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 SubEnd 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 GetIf 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 SetEnd 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 SubPrivate Sub Button1_Click(ByVal sender As _System.Object, ByVal e As System.EventArgs) _Handles Button1.Click Me.Hide() Form1.DefInstance.Show() End SubPrivate 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 SubEnd Module并把Module1设为启动项目。运行运行……哈哈,一切都如意!我开始喜欢上VB.NET了。 ---------------------------------------------------------------声明:本文版权与解释权归韩睿所有,如需转载,请保留完整的内容及此声明。QQ: 18349592E-Mail: Henry7685@hotmail.com">Henry7685@hotmail.com请访问本人专栏:NET/develop/author/NETauthor/Latitude/">http://www.csdn.NET/develop/author/NETauthor/Latitude/
Public Shared Property DefInstance() As Form1 GetIf 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 SetEnd 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 SubPrivate Sub Button1_Click(ByVal sender As _System.Object, ByVal e As System.EventArgs) _Handles Button1.Click Me.Hide() Form1.DefInstance.Show() End SubPrivate 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 SubEnd Module并把Module1设为启动项目。运行运行……哈哈,一切都如意!我开始喜欢上VB.NET了。 ---------------------------------------------------------------声明:本文版权与解释权归韩睿所有,如需转载,请保留完整的内容及此声明。QQ: 18349592E-Mail: Henry7685@hotmail.com">Henry7685@hotmail.com请访问本人专栏:NET/develop/author/NETauthor/Latitude/">http://www.csdn.NET/develop/author/NETauthor/Latitude/
相关文章推荐
- Henry的VB.NET之旅(三)—共享成员
- [VB.NET]remoting客户和服务器共享成员或接口的示例
- VB.NET之旅(三)—共享成员
- VB.Net中文教程(12) 共享成员(Shared Member)
- Henry手记-VB.NET中动态加载Treeview节点(二)
- Henry的VB.NET之旅(四)—类和结构
- Henry的VB.NET之旅(十一)—可视继承
- 为什么VB.net的Shared(共享)方法在C#中叫Static(静态)?
- Henry的VB.NET之旅(十一)—可视继承
- Henry手记-VB.net WinForm中的FORM初探(一)
- Henry手记-VB.NET中动态加载Treeview节点(一)
- Henry的VB.NET之旅(一)—失踪的窗体
- Henry的VB.NET之旅(十五)—动态事件处理方法
- 【Vegas共享】.VB.net 与C# 的代码转换 [08-03-10 Update]
- Henry的VB.NET之旅(六)—重载与隐藏
- asp.net,java,jsp,安卓Android,苹果ios,php,vb.net,c#免费毕业课程设计源码共享网盘下载
- asp.net,java,jsp,安卓Android,php,vb.net,c#/c++免费毕业课程设计源码共享下载
- .net4.0多进程间共享内存实现通信(VB.Net)
- (转)为什么VB.net的Shared(共享)方法在C#中叫Static(静态)?
- Henry手记-VB.net WinForm中的FORM初探(二)