探秘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,肯定会特别容易,虽然他们的语法不一样,但其中的思想都是一样的,都有类、构造函数、属性……

       VB.net和C#一些关键字的比较:

C#关键字

VB.net关键字

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,否则就会出现下面的错误提示:

       原因何在?

先来说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,则会报错:

       因此可以判断,在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)

        菜鸟学艺不精,仅供参考,如有出入,欢迎交流。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏IMWeb前端团队

走进Sass殿堂

最近在学习sass,从sass新手的角度做一个简单的总结,总结的不对的地方期望各位大大们能多多指点,本文是针对sass3.4做的一个总结~ 一、变量篇 1.1 ...

18910
来自专栏JMCui

MongoDB系列六(聚合).

 一、概念     使用聚合框架可以对集合中的文档进行变换和组合。基本上,可以用多个构件创建一个管道(pipeline),用于对一连串的文档进行处理。这些构件包...

6825
来自专栏章鱼的慢慢技术路

牛客网_Go语言相关练习_判断&选择题(4)

错误指的是可能出现问题的地方出现了问题,比如打开一个文件时失败,这种情况在人们的意料之中;而异常指的是不应该出现问题的地方出现了问题,比如引用了空指针,这种情况...

1082
来自专栏Java技术栈

44个Java代码性能优化总结

代码优化的最重要的作用应该是:避免未知的错误。在代码上线运行的过程中,往往会出现很多我们意想不到的错误,因为线上环境和开发环境是非常不同的,错误定位到最后往往是...

40512
来自专栏小狼的世界

Ruby学习笔记

Ruby语言中,以对象为基本单位,可以说所有的元素都是对象。按照之前对于面向对象程序的理解,对象是指包含了特定属性和方法集合的一组程序。对象由类来定义,具体的表...

742
来自专栏黑泽君的专栏

传智播客_风清扬_2015年java基础深入浅出版_刘意老师

视频百度网盘下载链接:https://pan.baidu.com/s/1pLc7AvL#list/path=%2F

5181
来自专栏佳爷的后花媛

java学习要点

作为一个程序员,在找工作的过程中,都会遇到笔试,而很多笔试里面都包括java,尤其是作为一个Android开发工程师,java是必备技能之一.所以为了笔试过程中...

2665
来自专栏Netkiller

Solidity 智能合约开发语言·数据类型

中国广东省深圳市龙华新区民治街道溪山美地 518131 +86 13113668890 <netkiller@msn.com>

75010
来自专栏信数据得永生

JavaScript 编程精解 中文第三版 二、程序结构

41115
来自专栏游戏杂谈

Objective-C 入门笔记

既然有头文件,所以很多人会拿它与C++进行类比,它最重要的三个特性是:Message、Category、Protocol,与C++类比,二者之间的不同:

963

扫码关注云+社区