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

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. MapReduce:将下面的两排数字先按第一排排序,然后再按第二排排序,要求顺序排序

    MapReduce:将下面的两排数字先按第一排排序,然后再按第二排排序,要求顺序排序 文件如下: 这个案例主要考察我们对排序的理解,我们可以这样做: 代码如下(由于水平有限,不保证完全正确,如果发现错 ...

  2. com.android.tools.build:gradle:X.XX.XX:gradle.jar 插件无法下载问题

    在使用Android Studio 这个IDE时,出现com.android.tools.build:gradle:X.XX.XX:gradle.jar 插件无法下载问题 可能的原因就是网速不好或者依 ...

  3. spring security结合数据库验证用户-XML配置方式

    之前的用户信息我们都是使用的内存用户,测试例子可以,实际中使用肯定不行,需要结合数据库进行验证用户.这就是本节的重点: 项目目录如下:  在之前的项目中的依赖中添加两个依赖: <dependen ...

  4. [BZOJ1116]CLO[并查集]

    看了样例突然发现= =无向边不会增加入度. 然后发现是环套环. 一个环所有点入度都为2. 最后的图无视所有无向边的话大概是这样的(将就一下 然后就可以并查集维护一下联通性... 当x , y属于一个联 ...

  5. 【Node.js】'readline' 逐行读取、写入文件内容

    [转]运用readline逐行读取的两种实现 效果图如下: 左边1.log 为源文件 右边1.readline.log为复制后的文件 下边为命令行输出 实现方式一: [javascript] view ...

  6. JavaWeb -- Struts 自定义拦截器, 登录权限拦截

    1. 自定义拦截器, 登录权限拦截 login.jsp 登录JSP <%@ page language="java" contentType="text/html; ...

  7. phpexcel: 数据导出

    // 设置列名最多40个 $cols = array( "A", "B", "C", "D", "E" ...

  8. 为Visual Studio添加快捷工具

    添加额外工具: Tools -> External Tools... 1. 添加Git Console Title: Git Console Command: C:\Program Files\ ...

  9. File工具类

    package cn.itcast.bos.utils; import java.io.IOException; import java.net.URLEncoder; import sun.misc ...

  10. layui中实现上传图片压缩

    一.关于js上传图片压缩的方法,百度有很多种方法,这里我参考修改了一下: function photoCompress(file, w, objDiv) { var ready = new FileR ...