共享和静态有什么区别?(这是一个关于IT技术的提问标题)

18

我是一名C#开发者,但今天我继承了一个没有文档的旧VB应用程序。我一直在阅读代码,并每隔5秒钟参考一次VB关键字列表

我猜我不理解SharedStatic之间的区别。

阅读这篇文章:https://dev59.com/QEvSa4cB1Zd3GeqPbQ5B#1980293

它说:

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似乎影响类的所有实例?这似乎非常危险。

在VB中,“Static”仅适用于局部变量 - 这意味着变量将在方法调用之间保持其值。例如,Static i As Integer = 2。虽然它并不经常使用,但确实存在。 - Dave Doknjas
无法从共享方法中分配非共享变量。 - Victor Zakharov
2个回答

28

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

C#中的Static类修饰符在VB.net中最接近的等效词是Module

在VB.NET中,Static关键字定义了一个存在于进程生命周期内的本地变量。这在C#中没有等效语法。

要详细比较两者之间的差异,请参见此链接:https://www.harding.edu/fmccown/vbnet_csharp_comparison.html


1
太棒了,我一直在尝试使用在线VB-C#转换工具来更好地理解事情,但效果非常差。这个看起来好多了。 - sab669

3
对于VB.Net,你可以像在C#中使用Static一样使用Shared关键字,但VB.Net也有一个static关键字,它用于保留变量值,即使方法调用已经结束。所以下次调用方法时将具有先前的值。MSDN在这里有更详细的解释。
从链接中可以看到一些有趣的行为:
当你在一个共享过程中声明静态变量时,整个应用程序只有一个静态变量副本可用。你通过使用类名而不是指向类实例的变量来调用共享过程。
当你在一个非共享过程中声明静态变量时,每个类的实例只有一个变量副本可用。你通过使用指向特定类实例的变量来调用非共享过程。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接