防止公共模块变量可全局访问

时间:2017-10-26 14:52:23

标签: vb.net

如果我有以下代码:

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,则此功能仅适用于程序集,而不适用于整个项目。

1 个答案:

答案 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

就个人而言,我认为类版本或尽可能少的全局变量更好