VB.NET的旅( 3)—共享成员

  我开始佩服起大李来了同时对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  '创建了类第 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了



Tags: 

延伸阅读

最新评论

发表评论