探秘VB.net中的shared与static
版权声明:本文为博主原创文章,未经博主同意不得转载。
https://blog.csdn.net/huyuyang6688/article/details/28230345
简单了解了一下C#之后,非常快就要開始重构机房收费系统了,有人选择用C#来实现,只是还是想好好了解一些VB.net。用它来实现。
有了VB和面向对象基础。学习VB.NET是极易上手的。学习了几种语言的我们都有一种体会,编程语言就是一门语言,一个工具,通过它来实现某些功能。假如我们之前学过C++,C#等不论什么一门OO语言。通过这些语言了解了OOP,如今让你来学习VB.NET,肯定会特别easy。尽管他们的语法不一样,但当中的思想都是一样的。都有类、构造函数、属性……
VB.net和C#一些keyword的比較:
| C#keyword | VB.netkeyword |
| using | Imports |
| this | Me |
| void | sub |
| base | MyBase |
| abstract | Mustlnherit |
| sealed | NotOverrideable |
| virtual | MustOverride |
| switch | Select |
| internal | Friend |
| static | shared |
| …… | …… |
只是大家有木有发现,在VB.net中也有static的踪影。那么在VB.net中,static是不是和C#中的static一样呢?它和shared有何差别呢?
前面写过一篇关于static的博客,这里相当于再小拓展一下。
先看两个小样例:
C#:
public class CircleArea //计算圆的面积
{
public double Area(double radius) //依据传入的半径值计算圆的面积
{
return PI.PI * radius * radius;
}
}
public class PI //定义PI的值
{
public static double PI = 3.14; '在这里,用static来修饰PI,以便其它地方调用
}
VB.net:
Public Class CircleArea '计算圆的面积
Public Function Area(ByVal radius As Double) As Double '依据传入半径来计算圆的面积
Return PI.PI * radius * radius
End Function
End Class
Public Class PI '定义PI的值
Public Shared PI As Double = 3.14 '
End Class
上面两个小样例中,都是把PI定义为静态的值,然后供须要使用PI的类或其它地方来调使用,并且此时在VB.net实现的样例中,PI类中的Shared无法换成Static。否则就会出现以下的错误提示:
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvaHV5dXlhbmc2Njg4/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="" />
原因何在?
先来说VB.net中的Static
还是通过一个样例来说明,建立一个VB.net窗口应用程序:
Public Class frmTest
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Static Dim temp As Integer = 1 '定义一个static变量temp
temp = temp + temp
MessageBox.Show("temp=" & temp)
End Sub
End Class
当程序执行起来时。点击Button1。弹出 temp=2;再点击,temp=3,再点击,temp=4…… 并且。在这里假设把Static换为Shared。则会报错:
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvaHV5dXlhbmc2Njg4/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="" />
因此能够推断,在VB.net中的static主要用来修饰的是静态变量,这里强调“静态”。主要是用static修饰的变量在程序执行时,在它的生存期内都是一直存在并保留着最新值,在下次调用时。不会被又一次初始化。
仅仅能对局部变量使用static。这意味着Static变量的声明上下文必须是一个过程中的块,而不是源文件、命名空间、类、结构或模块。不能再结构过程内使用Static。
再来说VB.net中的shared
在编程的过程中,常常须要共享一些数据。如我们在开发机房收费系统中用到的“单位价格”,与数据库连接的字符串等等,都须要共享。
回头来看文章开头那个计算圆面积的VB.net小程序:
Public Class CircleArea '计算圆的面积
Public Function Area(ByVal radius As Double) As Double '依据传入半径来计算圆的面积
Return PI.PI * radius * radius
End Function
End Class
Public Class PI '定义PI的值
Public Shared PI As Double = 3.14 '
End Class
这里。为什么叫“Shared”?share在英语中是“分享、共用”的意思,而这里的Shared所修饰的对象相同存放“同一个值”,是就用来“分享”的,供其它须要的对象所调用。因此我更喜欢称它“共享类型”。跟上面的PI一样,不论什么大小的圆计算面积时都要使用PI值,所以把它用Shared来修饰。
什么时候用Shared?
上面说到:“仅仅能对局部变量使用static。Static变量的声明上下文必须是一个过程中的块。而不是源文件、命名空间、类、结构或模块。不能再结构过程内使用Static。”,Shared刚好相反。它不能修饰局部变量。
假设一个变量须要其它程序段共用时,那么就用Shared,Shared能够用在Event 、Function 、Property 、Sub 等语句中。
很多其它精彩内容可參考MSDN:Shared
(Visual Basic) && Shared
(Visual Basic)
菜鸟学艺不精,仅供參考,如有出入,欢迎交流。
探秘VB.net中的shared与static的更多相关文章
- boost的link 和 runtime-link,搭配shared 和 static
转自:http://blog.csdn.net/yasi_xi/article/details/8660549 link:生成动态链接库/静态链接库.生成动态链接库需使用shared方式,生成静态链接 ...
- VB.NET中Module的概念
今天学习VB.NET,发现VB.NET里面有一个Module的东西,如下图(图-1)所示: 图-1 上网查了一下VB.NET里面的Module,才发现这是学习VB.NET遇到的第一个典型的问题就是:为 ...
- link 和 runtime-link,搭配shared 和 static(转)
原文转自 http://blog.csdn.net/yasi_xi/article/details/8660549 参考: http://bbs.sjtu.edu.cn/bbscon,board,C, ...
- [转载]C#中MessageBox.Show用法以及VB.NET中MsgBox用法
一.C#中MessageBox.Show用法 MessageBox.Show (String) 显示具有指定文本的消息框. 由 .NET Compact Framework 支持. MessageBo ...
- VB.NET中图像处理的一些技巧以及其和C#图像处理的差距。
早期的时候我使用的开发工具是VB6,VB6做图像处理的速度在我的软件Imageshop中有所体现,还是算可以的.目前,我已经改用C#来研究图像算法,C#中有指针,做图像处理起来效率确实要高不少.VB. ...
- VB.NET中的除法运算符 与 C#中的除法运算符
VB.NET中的除法运算符有两个:/(浮点除法).\(整数除法) C#中的除法运算符只有一个:/(除法) VB.NET中的除法运算符与C#中的除法运算符存在很大的差异,使用时注意区分. 关于VB.NE ...
- VB6中的引用传递 与 VB.NET中的引用传递的区别
首先注意一点,在VB6中缺省参数传递的方式是:引用传递,而在VB.NET中缺省参数传递的方式是:值传递. 然后我们看下面VB6中的引用传递与VB.NET中的引用传递的对比. VB6中的引用传递 Pri ...
- VB.NET中使用Linq TO SQL添加数据后获得自增长列ID
VB.NET中使用Linq TO SQL添加数据后获得自增长列ID: Dim tempOrdre As New Order With { .CustomerID = cmbCustomerName.S ...
- VB.NET中DataGridView控件
VB.NET中对于表格数据的显示经常使用到DataGridView控件,其以丰富多样的数据表呈现形式被程序猿喜爱. 本人在做一个小系统中运用DataGridView控件的部分属性,这些功能的使用在使用 ...
随机推荐
- 二叉树、平衡二叉树、B-Tree与B+Tree
本文总结自:https://blog.csdn.net/chuixue24/article/details/80027689 二叉树(B树,binary tree) 左子树的键值 < 根的键值 ...
- 记一次网卡报错ERROR,some other host already uses address
提示IP地址冲突,但是此IP确实没有被其他Server占用 解决如下: 编辑此文件 搜索arping 将下面几行注释掉 保存退出 激活网卡 此时IP地址已生效 下面是我的系统版本 (一般应该不会出现这 ...
- 20 个 OpenSSH 最佳安全实践
来源:https://linux.cn/article-9394-1.html OpenSSH 是 SSH 协议的一个实现.一般通过 scp 或 sftp 用于远程登录.备份.远程文件传输等功能.SS ...
- LOJ 一本通一句话题解系列:
第一部分 基础算法 第 1 章 贪心算法 1):「一本通 1.1 例 1」活动安排:按照结束时间排序,然后扫一遍就可以了. 2):「一本通 1.1 例 2」种树:首先要尽量的往区间重叠的部分种树,先按 ...
- HUE中oozie执行shell
Oozie执行Shell,传入参数1. 新建一个workflow 2. 拖入一个shell 3. shell脚本如下 #!/bin/sh sqoop import --connect jdbc:mys ...
- Codeforces Round #448 (Div. 2) B
题目描述有点小坑,ij其实是没有先后的 并且y并不一定存在于a中 判断y的个数和所给数组无关 对于2 - 7来说 中间满足%2==0的y一共有3个 2 4 6 这样 可以看出对于每个数字a 都能够二分 ...
- JavaWeb -- Struts1 使用示例: 表单校验 防表单重复提交 表单数据封装到实体
1. struts 工作流程图 超链接 2. 入门案例 struts入门案例: 1.写一个注册页面,把请求交给 struts处理 <form action="${pageContext ...
- 工作队列work queues 公平分发(fair dispatch) And 消息应答与消息持久化
生产者 package cn.wh.work; import cn.wh.util.RabbitMqConnectionUtil; import com.rabbitmq.client.Channel ...
- Eclipse的编码格式设置
在使用Eclipse开发中,许多文件编码默认是ISO-8859-1,不支持中文(如常用的JSP).这样我们每次建文件都要手动改编码,其实我们可以在设置文件默认编码,今后再创建时就不用每次修改编码了, ...
- 使用springmvc时报错HTTP Status 400 -
这个错误大多是因为,jsp的form表单提交的字段类型和后台接收字段类型不匹配造成的(例如,form中为String,后台接收为Integer). 我这里就是jsp表单中的日期数据没有写明类型,然后用 ...