微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

【机房重构】——share & static

背景:

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

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


先说下解决方法吧:

用share关键字:

在实体中:

  1. PublicSharedUserIDAsString

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

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

最初想到这个问题(如何设定一个公共变量),我先想到了:如何让一个变量被赋值,调用时不再变化(实例化后不是空)。然后我首先想到的是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一直保存最新数据。

总结:

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

原文地址:https://www.jb51.cc/vb/257499.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐