首页 > Web开发 > 详细

探秘VB.net中的shared与static

时间:2019-04-07 18:15:55      阅读:236      评论:0      收藏:0      [点我收藏+]
版权声明:本文为博主原创文章,未经博主同意不得转载。

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

? ? ? ?技术分享图片

? ? ? ?原因何在?


? ? ? ?先来说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)

? ? ? ? 菜鸟学艺不精,仅供參考,如有出入,欢迎交流。技术分享图片

探秘VB.net中的shared与static

原文:https://www.cnblogs.com/xfgnongmin/p/10666122.html

(0)
(0)
   
举报
评论 一句话评论(0
分享档案
最新文章
教程昨日排行
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!