【发布时间】:2015-09-10 23:57:39
【问题描述】:
我对 VB.NET 中的 Static 实现感到困惑。在 C# 中,我们可以创建静态类和静态方法来为我们的应用程序编写实用方法。
现在,VB.NET 让我们创建Module 来代替静态类。如果我们在模块中创建一个方法,默认情况下它是静态的。但在我的应用程序中,我编写了以下代码:
Public Class Utility
Public Shared Function GetValue() As String
// My code
End Function
End Class
通过编写代码,我能够以Utility.GetValue() 访问实用程序方法。由于这不是一个静态类,我应该实例化它的一个对象。但是这个方法对于Utility的类和对象都可以使用
现在我的问题是:
- 我所做的实现是否可能违反模块提供的静态类的任何特性?
- 这和实现一个模块有什么区别?
- 如果我改为创建一个模块,其范围会与此类相同吗?我想在整个项目以及引用该方法的其他项目中访问该方法。
我尝试查阅多篇文章,但没有找到确切的答案。请帮忙。
【问题讨论】:
-
在幕后,Module中的Public函数被转换为Class的Shared函数;他们是一样的东西。即使 Utility 可以被实例化,您也不能通过 Utility 的实例访问 GetValue();你仍然必须使用
Utility.GetValue()。 -
主要区别在于,使用类,您还可以在实用程序中拥有非共享成员(尽管您无法从共享元素访问这些非共享元素)。但是对于仅 Shared 成员,它与使用 Module 相同。
-
我也可以访问对象实例的
GetValue()方法。这就是我的困惑出现的地方。 @Idle_Mind -
澄清,您将收到一个警告,您不应该通过实例访问共享成员(取决于您在 Visual Studio 中如何配置警告/错误,它可能被视为一个错误)。实际上,您并没有真正通过实例访问共享成员,因为它是自动为您“修复”的。