转至繁体中文版     | 网站首页 | 图文教程 | 资源下载 | 站长博客 | 图片素材 | 武汉seo | 武汉网站优化 | 
最新公告:     敏韬网|教学资源学习资料永久免费分享站!  [mintao  2008年9月2日]        
您现在的位置: 学习笔记 >> 图文教程 >> 软件开发 >> VB.NET程序 >> 正文
VB.Net中文教程(12) 共享成员(Shared Member)         ★★★★

VB.Net中文教程(12) 共享成员(Shared Member)

作者:闵涛 文章来源:闵涛的学习笔记 点击数:2545 更新时间:2009/4/23 19:01:10
nbsp;  e2.Display()
    End Sub
End Class

此程序输出如下﹕
                 Name:Tom    Salary:25000
                 Name:Lily    Salary:20000

    指令── salary = emp.salary + money 已经在Employee类别的保护中,这是不错的做法。
    另一种方法是采用共享资料成员,是同一类别里各对象皆共享其值;一般资料成员的值是封装于各对象内,别的对象是拿不到的。共享资料成员的值是在对象之外,但封装在类别内,只要是该类别的对象皆能拿到该值。因为一般资料成员的值封装于对象内,所以又称为对象变量(Instance Variable);共享资料成员封装于类别,所以又称为类别变量(Class Variable)。上述程序可改用共享变量如下﹕

''''ex04.bas
Imports System.ComponentModel
Imports System.Drawing
Imports System.WinForms
''''----------------------------------------------------
Class Employee
    Private emp_name As String
    Private salary As Double
    Private Shared temp As Double

    Public Overloads Sub New(ByVal na As String)
        emp_name = na
    End Sub
    Shared Sub New()
        temp = 0
    End Sub
    Public Overloads Sub New(ByVal na As String, ByVal s As Double)
        emp_name = na
        salary = s
    End Sub
    Public Sub output()
        temp = salary
    End Sub
    Public Sub input()
        salary = temp
    End Sub
    Public Sub add_temp(ByVal money As Double)
        temp = temp + money
    End Sub
    Public Sub Display()
        MessageBox.Show("Name: " + emp_name + "    Salary: " + str(salary))
    End Sub
End Class
''''-----------------------------------------------------
Public Class Form1
    Inherits System.WinForms.Form
    Public Sub New()
        MyBase.New()
        Form1 = Me
        ''''This call is required by the Win Form Designer.
        InitializeComponent()
        ''''TODO: Add any initialization after the InitializeComponent() call
    End Sub
    ''''Form overrides dispose to clean up the component list.
    Public Overrides Sub Dispose()
        MyBase.Dispose()
        components.Dispose()
    End Sub
#Region " Windows Form Designer generated code "
     ......   
#End Region
    Protected Sub Form1_Click(ByVal sender As Object, ByVal e As System.EventArgs)
        Dim e1 As New Employee("Tom")
        Dim e2 As New Employee("Lily", 20000)
        e2.output()
        e2.add_temp(5000)
        e1.input()
        e1.Display()
        e2.Display()
    End Sub
End Class

此程序输出如下﹕
                Name:Tom    Salary:25000
                Name:Lily    Salary:20000


宣告指令── Private Shared temp As Double
说明了﹐temp是共享资料成员。兹归纳,共享资料成员与一般资料成员之区别为:

        「共享资料成员是各对象公用的资料﹐
          而一般资料成员是对象之私有资料。」

当第1次诞生对象时﹐共享资料成员就由Shared Sub New()诞生了。当执行到指令──
          Dim e1 As New Employee("Tom")

就诞生对象e1。但temp比e1早诞生。接下来﹐执行指令──
             Employee e2( "Lily", 20000 )

它诞生对象e2。此时Employee类别之内容为﹕
         
          

             图3、类别沟通方式──使用共享资料成员

    其中﹐e1及e2各含有一份emp_name及salary资料。然而整个Employee类别才只有一份temp资料﹐对象共同分享此temp内之资料。Employee类别里的任何对象皆可视temp为其资料成员来使用﹐但事实上只有一个temp。由于它属于所有的对象﹐所以各对象皆可经由程序成员存取temp资料。重要的是﹐temp已在Employee类别的保护之中﹐藉由它传递资料就无受外界干扰之虞了。
    共享资料成员除了供对象之间的沟通之用外﹐还有其重要的用途──记载类别的状况﹐例如记录该类别共诞生了多少对象。请看个例子﹕

''''ex05.bas
Imports System.ComponentModel
Imports System.Drawing
Imports System.WinForms
''''-----------------------------------------------------------
Class Employee
    Private emp_name As String
    Private salary As Double
   
    Private Shared counter As Integer
    Private Shared sum As Double
   
    Shared Sub New()
        counter = 0
        sum = 0
    End Sub
    Public Sub New(ByVal na As String, ByVal s As Double)
        emp_name = na
        salary = s
        counter = counter + 1
        sum = sum + salary
    End Sub
    Public Sub Display_Avg()
        MessageBox.Show("The number of employee : " + str(counter))
        MessageBox.Show("Average salary : " + str(sum / counter))
    End Sub
    Public Sub Display()
        MessageBox.Show("Name: " + emp_name + "    Salary: " + str(salary))
    End Sub
End Class
''''-------------------------------------------------------------------
Public Class Form1
    Inherits System.WinForms.Form
    Public Sub New()
        MyBase.New()
        Form1 = Me
        ''''This call is required by the Win Form Designer.
        InitializeComponent()
        ''''TODO: Add any initialization after the InitializeComponent() call
    End Sub
    ''''Form overrides dispose to clean up the component list.
    Public Overrides Sub Dispose()
        MyBase.Dispose()
        components.Dispose()
    End Sub
#Region " Windows Form Designer generated code "
    ......
#End Region
    Protected Sub Form1_Click(ByVal sender As Object, ByVal e As System.EventArgs)
        Dim e1 As New Employee("Tom", 25000)
        Dim e2 As New Employee("Lily", 20000)
        e1.Display()
        e2.Display()
        e1.Display_Avg()
    End Sub
End Class

此程序输出﹕
              Name: Tom   Salary: 25000
              Name: Lily   Salary: 20000
              The number of employee : 2
              Average salary : 22500

counter 记录类别中含有多少对象。sum 储存各对象的salary值之总和。于此﹐必须给予 counter及 sum初值。共享变量之初值设定格式为──

               Shared Sub New()
                     共享资料成员1 = 初值
                     共享资料成员2 = 初值
                     ......
                 End Sub

计算机开始执行,诞生第1个对象时﹐各共享成员就诞生了﹐而且设定了初值。此时Employee类别的内容为﹕

            

   对象诞生时﹐会去执行建构者程序──Public Sub New(...),先把各资料存入对象之私有成员中﹔同时也执行指令──counter = counter + 1﹐使共享变量 counter值加上 1。此外﹐也执行指令──sum = sum + salary ﹐把e1之salary值加到 sum里头。此时共享变量的内容为﹕

              

counter 值为 1﹐表示Employee内已诞生一个对象。接着﹐诞生个体e2﹐计算机又执行建构者程序──Public Sub New(...)。它把资料存入对象e2中﹐使 counter加上 1﹐也把e2之salary值加到 sum中。此时﹐共享变量之内容为﹕

        

    注意﹐e1含有 4个资料成员──emp_name、salary、counter 及sum ﹔其值分别为 "Tom"、

上一页  [1] [2] [3] [4]  下一页


[ORACLE]Oracle内存结构:Shared Pool的详细信息  
教程录入:mintao    责任编辑:mintao 
  • 上一篇教程:

  • 下一篇教程:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      注:本站部分文章源于互联网,版权归原作者所有!如有侵权,请原作者与本站联系,本站将立即删除! 本站文章除特别注明外均可转载,但需注明出处! [MinTao学以致用网]
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)

    同类栏目
    · C语言系列  · VB.NET程序
    · JAVA开发  · Delphi程序
    · 脚本语言
    更多内容
    热门推荐 更多内容
  • 没有教程
  • 赞助链接
    更多内容
    闵涛博文 更多关于武汉SEO的内容
    500 - 内部服务器错误。

    500 - 内部服务器错误。

    您查找的资源存在问题,因而无法显示。

    | 设为首页 |加入收藏 | 联系站长 | 友情链接 | 版权申明 | 广告服务
    MinTao学以致用网

    Copyright @ 2007-2012 敏韬网(敏而好学,文韬武略--MinTao.Net)(学习笔记) Inc All Rights Reserved.
    闵涛 投放广告、内容合作请Q我! E_mail:admin@mintao.net(欢迎提供学习资源)

    站长:MinTao ICP备案号:鄂ICP备11006601号-18

    闵涛站盟:医药大全-武穴网A打造BCD……
    咸宁网络警察报警平台