【机房重构】——share & static

    背景:

    在敲机房收费系统修改密码过程中,遇到一个问题:如何将登陆的用户名记录下来,以供修改密码查找记录时调用。

    曾经敲vb版本机房时,是在模板里定义了一个公共变量,这里应该也是这种思想....但如何定义呢?


先说下解决方法吧:

    用share关键字:

在实体中:

  1. Public Shared UserID As String  

这样就可实现将变量值应用于整个程序。

    调用时便不用初始化,直接:项目.类.变量名即可调用。

    最初想到这个问题(如何设定一个公共变量),我先想到了:如何让一个变量被赋值,调用时不再变化(实例化后不是空)。然后我首先想到的是static关键字,static关键字是在C++考试时接触较多的。但我也只知道给static类变量赋值后,将保留最新值,其它也不是很了解。试验后,结果是:static用在这里是不合适的,所以又找到了share。

    static为什么不行,问题在哪,它和share有什么区别?

    基于这些问题,总结了这篇博客:


static:


    指定在声明一个或多个局部变量的过程终止后,这些已声明的局部变量继续存在并保留其最新值。


    通常,过程终止后,此过程中的局部变量将立即消失。静态变量可继续存在,并保留其最新值。您的代码下次调用此过程时,此变量将不会重新初始化,仍然存储已赋给它的最新值。静态变量在定义它的类或模块的生存期内继续存在。


    但只能对局部变量使用Static。这意味着 Static 变量的声明上下文必须是一个过程或过程中的块,而不能是源文件、命名空间、类、结构或模块。


    不能在结构过程内使用 Static。


    在机房收费系统修改密码时,是利用登录时的用户名搜索相应记录查找信息。登录和修改密码是不同的类,所以用static不合适,登录时,将用户名记录在static类变量中,当登录界面关闭时,变量即消失,下次使用需再次初始化,所以无法在不同类间共享用户名信息。


share:


    指定一个或多个声明的编程元素与一个类或结构在整体上相关联,而不是与类或结构的特定实例关联。


    share是一个共享成员。共享成员即被类的实例所共享的属性、过程、字段等。


    总言之:share与static最大的区别在于:share的作用域为整个程序,而static只面向一个类。


举例比较:


static:


Public Class Describer
    Public Function NextNumber() As Integer
        static Number As Integer
        Number += 1
        Return Number
    End Function
End Class
Dim Desc1 As New Count
Dim Desc2 As New Count
MsgBox(Desc1.NextNumber) '输出1
MsgBox(Desc1.NextNumber) '2
MsgBox(Desc1.NextNumber) '3
MsgBox(Desc2.NextNumber) '1
MsgBox(Desc2.NextNumber) '2
MsgBox(Desc2.NextNumber) '3

 

share:

 

Public ClassCount

    Share Number As Integer

    Public Function NextNumber() As Integer
        Number += 1
        Return Number
    End Function
End Class
Dim Desc1 As New Count
Dim Desc2 As New Count
MsgBox(Desc1.NextNumber) '输出1
MsgBox(Desc1.NextNumber) '2
MsgBox(Desc1.NextNumber) '3
MsgBox(Desc2.NextNumber) '4
MsgBox(Desc2.NextNumber) '5
MsgBox(Desc2.NextNumber) '6

    对比可以看出:static跟随类的关闭而清空。share一直保存最新数据。

总结:

    遇到问题,先自己思考,寻找解决方法。再在方法中对比学习,将收获多多。


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值