版权声明:本文为博主原创文章,未经博主同意不得转载。

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的更多相关文章

  1. boost的link 和 runtime-link,搭配shared 和 static

    转自:http://blog.csdn.net/yasi_xi/article/details/8660549 link:生成动态链接库/静态链接库.生成动态链接库需使用shared方式,生成静态链接 ...

  2. VB.NET中Module的概念

    今天学习VB.NET,发现VB.NET里面有一个Module的东西,如下图(图-1)所示: 图-1 上网查了一下VB.NET里面的Module,才发现这是学习VB.NET遇到的第一个典型的问题就是:为 ...

  3. link 和 runtime-link,搭配shared 和 static(转)

    原文转自 http://blog.csdn.net/yasi_xi/article/details/8660549 参考: http://bbs.sjtu.edu.cn/bbscon,board,C, ...

  4. [转载]C#中MessageBox.Show用法以及VB.NET中MsgBox用法

    一.C#中MessageBox.Show用法 MessageBox.Show (String) 显示具有指定文本的消息框. 由 .NET Compact Framework 支持. MessageBo ...

  5. VB.NET中图像处理的一些技巧以及其和C#图像处理的差距。

    早期的时候我使用的开发工具是VB6,VB6做图像处理的速度在我的软件Imageshop中有所体现,还是算可以的.目前,我已经改用C#来研究图像算法,C#中有指针,做图像处理起来效率确实要高不少.VB. ...

  6. VB.NET中的除法运算符 与 C#中的除法运算符

    VB.NET中的除法运算符有两个:/(浮点除法).\(整数除法) C#中的除法运算符只有一个:/(除法) VB.NET中的除法运算符与C#中的除法运算符存在很大的差异,使用时注意区分. 关于VB.NE ...

  7. VB6中的引用传递 与 VB.NET中的引用传递的区别

    首先注意一点,在VB6中缺省参数传递的方式是:引用传递,而在VB.NET中缺省参数传递的方式是:值传递. 然后我们看下面VB6中的引用传递与VB.NET中的引用传递的对比. VB6中的引用传递 Pri ...

  8. VB.NET中使用Linq TO SQL添加数据后获得自增长列ID

    VB.NET中使用Linq TO SQL添加数据后获得自增长列ID: Dim tempOrdre As New Order With { .CustomerID = cmbCustomerName.S ...

  9. VB.NET中DataGridView控件

    VB.NET中对于表格数据的显示经常使用到DataGridView控件,其以丰富多样的数据表呈现形式被程序猿喜爱. 本人在做一个小系统中运用DataGridView控件的部分属性,这些功能的使用在使用 ...

随机推荐

  1. 二叉树、平衡二叉树、B-Tree与B+Tree

    本文总结自:https://blog.csdn.net/chuixue24/article/details/80027689 二叉树(B树,binary tree) 左子树的键值 < 根的键值 ...

  2. 记一次网卡报错ERROR,some other host already uses address

    提示IP地址冲突,但是此IP确实没有被其他Server占用 解决如下: 编辑此文件 搜索arping 将下面几行注释掉 保存退出 激活网卡 此时IP地址已生效 下面是我的系统版本 (一般应该不会出现这 ...

  3. 20 个 OpenSSH 最佳安全实践

    来源:https://linux.cn/article-9394-1.html OpenSSH 是 SSH 协议的一个实现.一般通过 scp 或 sftp 用于远程登录.备份.远程文件传输等功能.SS ...

  4. LOJ 一本通一句话题解系列:

    第一部分 基础算法 第 1 章 贪心算法 1):「一本通 1.1 例 1」活动安排:按照结束时间排序,然后扫一遍就可以了. 2):「一本通 1.1 例 2」种树:首先要尽量的往区间重叠的部分种树,先按 ...

  5. HUE中oozie执行shell

    Oozie执行Shell,传入参数1. 新建一个workflow 2. 拖入一个shell 3. shell脚本如下 #!/bin/sh sqoop import --connect jdbc:mys ...

  6. Codeforces Round #448 (Div. 2) B

    题目描述有点小坑,ij其实是没有先后的 并且y并不一定存在于a中 判断y的个数和所给数组无关 对于2 - 7来说 中间满足%2==0的y一共有3个 2 4 6 这样 可以看出对于每个数字a 都能够二分 ...

  7. JavaWeb -- Struts1 使用示例: 表单校验 防表单重复提交 表单数据封装到实体

    1. struts 工作流程图 超链接 2. 入门案例 struts入门案例: 1.写一个注册页面,把请求交给 struts处理 <form action="${pageContext ...

  8. 工作队列work queues 公平分发(fair dispatch) And 消息应答与消息持久化

    生产者 package cn.wh.work; import cn.wh.util.RabbitMqConnectionUtil; import com.rabbitmq.client.Channel ...

  9. Eclipse的编码格式设置

    在使用Eclipse开发中,许多文件编码默认是ISO-8859-1,不支持中文(如常用的JSP).这样我们每次建文件都要手动改编码,其实我们可以在设置文件默认编码,今后再创建时就不用每次修改编码了, ...

  10. 使用springmvc时报错HTTP Status 400 -

    这个错误大多是因为,jsp的form表单提交的字段类型和后台接收字段类型不匹配造成的(例如,form中为String,后台接收为Integer). 我这里就是jsp表单中的日期数据没有写明类型,然后用 ...