【问题标题】:Shared vs Static Dim statement?共享与静态暗淡声明?
【发布时间】:2020-04-19 01:15:49
【问题描述】:

根据 Microsoft 文档上的 Visual Basic Dim 声明。

Dim 语句可以是 Shared、Shadows、Static 和 ReadOnly

语句结构:

[ <attributelist> ] [ accessmodifier ] [[ Shared ] [ Shadows ] | [ Static ]] [ ReadOnly ] Dim [ WithEvents ] variablelist

我的问题是:

  1. 共享和静态之间有什么区别?
  2. 何时使用一个而不是另一个?
  3. 使用其中一种是否有任何限制?

我认为 Shared 和 Static 是一回事。

参考:https://docs.microsoft.com/en-us/dotnet/visual-basic/language-reference/statements/dim-statement

【问题讨论】:

  • 它说的是“可能”而不是“应该”。通常 Dim 用于方法内部,没有修饰符或属性。
  • “我认为 Shared 和 Static 是一回事”。您可能听说过 VB 中的 Shared 与 C# 中的 static 相同。 VB 中的Static 是另一回事。请注意,VB 中的 Shared 和 C# 中的 static 表示整个类型的单个成员,而不是每个类型实例的成员的单独实例,而 VB 中的 Static 表示局部变量的单个实例对于该方法的所有实例,因此存在一些相似之处。

标签: .net vb.net


【解决方案1】:

Static 只能用于局部变量,即在方法中声明的变量。它使变量在调用之间保持其值。它有效地使类的实例字段中的变量仅在此方法内可见。

Shared 应用于类和结构的成员。然后,此类成员在此类或结构的所有实例(即对象)之间共享。

在C#中没有关键字对应VB的Static;但是,有一个static 关键字对应于VB 的Shared 关键字(我觉得有点混乱)。

见:

【讨论】:

  • 我相信 VB 静态的工作方式与 C 的静态类似。我认为 C# static 的历史是它从 C++ 继承而来,它使用这个词是因为它们尽可能地重载了 C 中的关键字,以尽量减少将有效 C 代码转换为有效 C++ 代码所需的更改。
  • 不,VB Shared 像 C# static 一样工作。 C# 中不能有静态局部变量。
  • 嗯,我的评论根本没有讨论 VB Shared,而只是在共同祖先的背景下讨论了 C# static。我不反对当前状态可能令人困惑,我只是在尽力猜测我们是如何走到现在的。
  • 可以,但Static (Visual Basic) 只能应用于局部变量。链接的文章说:指定一个或多个声明的局部变量在声明它们的过程终止后继续存在并保留其最新值。
  • 确实,我相信 C 中的 static 具有相同的行为(在此确认:geeksforgeeks.org/static-variables-in-c)。 C++ 重载static(因为他们希望最小化新关键字以最小化将有效 C 代码转换为有效 C++ 代码所需的更改)与当前在 C# 中的含义相同,而 C# 的含义来自 C++,现在在这里我们是,其中 VB 中的 Static 没有 C# 等效项(但等效于 C# 的祖先 C 中的 static),VB 中的 Shared 等效于 C# 中的 static 和类级 static在 C++ 中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多