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

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

作者:闵涛 文章来源:闵涛的学习笔记 点击数:2522 更新时间:2009/4/23 19:01:10

请注意 ......
著作权所有人:物泽计算机事业股份有限公司、
              MISOO对象技术顾问团队、对象导向杂志作者、等。
u本文件摘自 对象导向杂志、精通对象观念与技术等书籍著作。
u本文件仅供您的参阅,请遵守著作权法,不得做其它商业用途。

 

 主题:   共享成员(Shared Member)


??????  内容  ??????
v 1. 共享资料成员
v 2. 共享程序成员
   
    您已经习惯像 New Employee("Tom", 25)这样的指令了,看到这个指令可以想向它是:Employee.New("Tom", 25),于是不难想象到,原来类别也是对象!这个类别对象(Class Object)接到New()讯息时,就去诞生一个对象,原来类别对象就是妈妈对象(Meta Object)!妈妈是小孩共有的,妈妈的资料值是小孩共享的,妈妈的程序是小孩共享的。本文就介绍这种共享的资料成员和程序成员。

 

1. 共享资料成员
    对象拥有自己的空间﹐也拥有自己的资料﹔对象之间的沟通(交换资料)方法是个重要问题。如果只想传递某项资料时﹐该如何呢﹖

       
                    图1、 对象间之沟通

    有数种可行方法﹐请看个例子﹕

''''ex01.bas
Imports System.ComponentModel
Imports System.Drawing
Imports System.WinForms
''''----------------------------------------------------
Class Employee
    Private emp_name As String
    Public salary As Double
    Public Overloads Sub New(ByVal na As String)
        emp_name = na
    End Sub
    Public Overloads Sub New(ByVal na As String, ByVal s As Double)
        emp_name = na
        salary = s
    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)
        e1.salary = e2.salary + 5000
        e1.Display()
        e2.Display()
    End Sub
End Class

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

这宣告salary为public变量﹐让main()能直接使用salary变量。指令:
            e1.salary = e2.salary + 5000

把对象e2之salary值加上5000﹐然后存入e1之salary变量中。此程序﹐重复定义了建构者程序── New()﹐宣告对象e1及e2时﹐就有两种选择﹕只输入姓名﹐或同时输入姓名及薪资额。请注意一项缺点﹕把salary宣告为Public变量﹐让Form1_Click()可使用salary变量名称﹐直接把资料存入对象中。若其它程序也依样画葫芦﹐任意把值存入salary中﹐那么salary值可能无意中遭破坏了。
    如果salary资料并非机密﹐尚无所谓。如果salary含有极重要资料﹐就得谨慎小心了。就像一颗炸弹(Employee类别)内的炸药(salary资料)可能无意中因外面因素(温度升高等)而引起变化导致爆炸﹐就危险了。

                    
                图2、类别之保护功能

    因之﹐为让对象之间互相传递资料而把资料成员宣告为Public变量并不甚妥当。希望能像炸弹一样﹐只能经由信管(程序成员)使内部的炸药(salary)起化学作用。于是﹐宣告salary为Private变量﹐把它封藏在Employee的保护之中才安全。类别(及对象)之用途和手表、灯泡、蜗牛的外壳是一样的──保护内部之资料﹐只限特定之管道才能存取资料。然而一旦把salary藏入Employee壳中﹐上述程序就出问题了﹐如下﹕

''''ex02.bas
''''Some Error Here!
Imports System.ComponentModel
Imports System.Drawing
Imports System.WinForms
''''----------------------------------------------------
Class Employee
    Private emp_name As String
    Private salary As Double
    Public Overloads Sub New(ByVal na As String)
        emp_name = na
    End Sub
    Public Overloads Sub New(ByVal na As String, ByVal s As Double)
        emp_name = na
        salary = s
    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)
        e1.salary = e2.salary + 5000   ''''Error !
        e1.Display()
        e2.Display()
    End Sub
End Class

  因为salary变成 Private变量﹐Form1_Click()不能使用它﹗
         

  为了将传递之过程纳入类别保护之中﹐有数种方法,例如:

''''ex03.bas
Imports System.ComponentModel
Imports System.Drawing
Imports System.WinForms
''''----------------------------------------------------------------------
Class Employee
    Private Shared temp As Double
    Private emp_name As String
    Private salary As Double
   
    Shared Sub New()
        temp = 0
    End Sub
    Public Overloads Sub New(ByVal na As String)
        emp_name = na
    End Sub
    Public Overloads Sub New(ByVal na As String, ByVal s As Double)
        emp_name = na
        salary = s
    End Sub
    Public Sub addSalaryTo(ByVal emp As Employee , ByVal money As Double)
        salary = emp.salary + 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)
        e1.addSalaryTo(e2, 5000)
        e1.Display()
     &

[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……
    咸宁网络警察报警平台