Shared和Static有什么区别?

时间:2014-06-19 15:11:20

标签: c# vb.net static static-methods shared

我是一名C#开发人员,但我今天继承了一个传统的VB应用程序,其中包含0个文档。我已经开始阅读代码并每隔5秒引用一次list of VB keywords

我想我不明白SharedStatic之间的区别。

阅读这篇文章:https://stackoverflow.com/a/1980293/1189566

它声明:

  

VB没有static,它有shared

但是您可以在上面链接的关键字列表中看到Static是保留关键字。看起来Static仅适用于字段,其中Shared可以位于方法字段上?

我想最终我只是希望有人能够扩展我所链接的答案,为VB菜鸟提供更多细节。

例如,说我有这个

public class MyClass
    Dim myVar as Integer = 1

    public shared sub UpdateMyVar()
        myVar = 2
    end sub
end class

public class MyOtherClass
    Dim cOne = New MyClass()
    Dim cTwo = New MyClass()

    cOne.UpdateMyVar()
    txtMyTextBox.Text = cTwo.myVar.ToString()
end class

请原谅任何语法问题。假设此代码编译。我在一个半小时前就开始浏览代码了。

cTwo.myVar1还是2?我猜2因为Shared似乎影响了所有类的实例?这似乎非常危险。

2 个答案:

答案 0 :(得分:15)

VB.net中等效的C#Static 方法修饰符为Shared

VB.Net中最接近的C#Static 修饰符是Module

VB.NET中的Static关键字定义了一个在进程生命周期内存在的局部变量。在C#中没有相同的内容。

有关两者之间比较的绝佳参考,请参阅此链接:https://www.harding.edu/fmccown/vbnet_csharp_comparison.html

答案 1 :(得分:2)

对于VB.Net,您使用与C#中使用的静态完全相同的共享,但VB.Net也有一个静态关键字,即使在方法调用结束后,它也用于保留变量值。因此,下次调用方法时,它将具有之前的值。 MSDN在此处有更详细的解释 - http://msdn.microsoft.com/en-us/library/z2cty7t8.aspx

从链接中有一些有趣的行为:

  

在Shared过程中声明静态变量时,只有一个   静态变量的副本可用于整个应用程序。   您可以使用类名称而不是变量来调用共享过程   指向类的实例。

     

声明静态时   在一个非共享的过程中的变量,只有一个副本   变量可用于类的每个实例。你打电话给   通过使用指向特定变量的变量来实现非共享过程   班级的实例。