探秘VB.net中的shared与static

简介: 简单了解了一下C#之后,很快就要开始重构机房收费系统了,有人选择用C#来实现,不过还是想好好了解一些VB.net,用它来实现。

      简单了解了一下C#之后,很快就要开始重构机房收费系统了,有人选择用C#来实现,不过还是想好好了解一些VB.net,用它来实现。


      有了VB和面向对象基础,学习VB.NET是极易上手的。学习了几种语言的我们都有一种体会,编程语言就是一门语言,一个工具,通过它来实现某些功能。假如我们之前学过C++,C#等任何一门OO语言,通过这些语言了解了OOP,现在让你来学习VB.NET,肯定会特别容易,虽然他们的语法不一样,但其中的思想都是一样的,都有类、构造函数、属性……



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

39.png

          不过大家有木有发现,在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,否则就会出现下面的错误提示:


40.png


      原因何在?


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

41.png


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


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


相关文章
|
9月前
|
监控 前端开发 API
一款基于 .NET MVC 框架开发、功能全面的MES系统
一款基于 .NET MVC 框架开发、功能全面的MES系统
211 5
|
开发框架 前端开发 JavaScript
ASP.NET MVC 教程
ASP.NET 是一个使用 HTML、CSS、JavaScript 和服务器脚本创建网页和网站的开发框架。
193 7
|
开发框架 前端开发 .NET
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
371 0
|
存储 开发框架 前端开发
ASP.NET MVC 迅速集成 SignalR
ASP.NET MVC 迅速集成 SignalR
209 0
|
开发框架 前端开发 .NET
ASP.NET MVC WebApi 接口返回 JOSN 日期格式化 date format
ASP.NET MVC WebApi 接口返回 JOSN 日期格式化 date format
159 0
|
开发框架 前端开发 安全
ASP.NET MVC 如何使用 Form Authentication?
ASP.NET MVC 如何使用 Form Authentication?
275 0
|
开发框架 .NET
Asp.Net Core 使用X.PagedList.Mvc.Core分页 & 搜索
Asp.Net Core 使用X.PagedList.Mvc.Core分页 & 搜索
395 0
|
存储 开发框架 前端开发
[回馈]ASP.NET Core MVC开发实战之商城系统(五)
经过一段时间的准备,新的一期【ASP.NET Core MVC开发实战之商城系统】已经开始,在之前的文章中,讲解了商城系统的整体功能设计,页面布局设计,环境搭建,系统配置,及首页【商品类型,banner条,友情链接,降价促销,新品爆款】,商品列表页面,商品详情等功能的开发,今天继续讲解购物车功能开发,仅供学习分享使用,如有不足之处,还请指正。
253 0
|
开发框架 前端开发 .NET
[回馈]ASP.NET Core MVC开发实战之商城系统(一)
[回馈]ASP.NET Core MVC开发实战之商城系统(一)
330 0