繁体   English   中英

Shared和Static有什么区别?

[英]What are the differences between Shared and Static?

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

我想我不明白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.myVar会是1还是2 我猜2因为Shared似乎影响了一个类的所有实例? 这似乎非常危险。

相当于C# Static 方法修饰符在VB.net中是Shared

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

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

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

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

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

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

在非共享的过程中声明静态变量时,只有该变量的一个副本可用于该类的每个实例。 通过使用指向类的特定实例的变量来调用非共享过程。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM