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

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

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

  “可以使用共享成员。”大李依然是那么淡淡然,“VB.NET现在是支持真正的面向对象编程,可以继承、使用多态、共享成员和静态成员。共享成员就是在所有类和所定义派生类的实例之间共享的方法、属性、字段和事件。所有使用类创建的对象都可以访问相同的数据、共享实现过程,并且收到相同的激发事件。”

  “这么好呀,那怎么实现呢?”我好象又回到了课堂上,满脑都是无知的符号。

  “很简单,在Public或Private成员修饰符后加上Shared关键字即可了。Shared关键字指示一个或多个被声明的编程元素将被共享。共享元素不关联于某类或结构的特定实例。可以通过使用类名或结构名称或者类或结构的特定实例的变量名称限定共享元素来访问它们。你来看这段代码

双击代码全选
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
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修改了。”

  “没错!”大李又一次绽放了会心的微笑,真是对我的最高奖赏。“那你还不动手修改一下你的程序?”

  好!说做就做。既然共享属性在其调用的时候是不用实例化的,那么我最好能借助构造一个共享属性来实现。并且要能够判断其实例是否存在或是否被销毁,如果不存在就构造一个新的窗体实例,如果存在就对其进行调用:

双击代码全选
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
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。调用它是如此的方便:

双击代码全选
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
//Form1中的代码 
 
Private   Sub  Button1_Click( ByVal  sender  As  System. Object ,  ByVal  e  As  System.EventArgs) 
Handles  Button1.Click 
 
     Me .Hide() 
 
    Form2.DefInstance.Show() 
 
End   Sub  
 
//Form2中的代码 
 
  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在哪呢?”大李这句话真是惊醒梦中人呀!

  我立刻动手:

双击代码全选
1
2
3
4
5
6
7
8
9
Module  Module1 
 
   Sub  Main() 
 
    Application.Run(Form1.DefInstance)  
 
   End   Sub  
 
End   Module  

  并把Module1设为启动项目。运行运行……哈哈,一切都如意!我开始喜欢上VB.NET了。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值