如果我有以下代码:
Public Module MyModule
Public MyVariable As Integer
End Module
VB.NET允许从项目的任何位置无限制地访问变量(字段),这意味着我可以在项目 1 中的任何地方编写以下内容:
MyVariable = 5
有没有办法在特定类型上禁用此行为,以便我只能通过模块名称访问变量?
MyModule.MyVariable = 5
NB。我知道我可以使用标准类,并在所有成员上使用Shared
关键字:
Public Class MyModule
Public Shared MyVariable
End Class
1。如果我在模块上使用Friend
而不是Public
,则此功能仅适用于程序集,而不适用于整个项目。
答案 0 :(得分:3)
首先,那些不需要Public
来获取全局变量行为。 Friend
也可以运作:
声明语句中的Friend关键字指定可以从同一个程序集中访问元素,但不能从程序集外部访问。
如果您将模块放在不同的命名空间中,您可以获得以下行为:
Namespace Plutonix
Friend Module GlobalVars
Friend MyVariable As Int32
End Module
End Namespace
不幸的是,VB会将项目名称空间添加到您使用的任何内容中,因此您的导入将类似于:
Imports PrjNamespace.Plutonix
但是你得到了你想要的东西:
GlobalVars.MyVariable = 9
就个人而言,我认为类版本或尽可能少的全局变量更好