VB.NET中的静态方法实现

32

我对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类和对象都是可用的。

现在我的问题是:

  1. 我所做的实现是否可能违反了模块提供的静态类功能之一?
  2. 这与实现模块有什么区别?
  3. 如果我创建一个模块,那么它的作用域是否与这个类相同?我想在整个项目以及引用此项目的其他项目中访问该方法。

我尝试查阅多篇文章,但没有找到确切的答案。请帮帮我。


2
在幕后,模块中的公共函数被转换为类的共享函数;它们是相同的。尽管可以实例化Utility,但不能通过Utility的实例访问GetValue(); 仍然必须使用Utility.GetValue() - Idle_Mind
3
主要区别在于,使用 Class 可以在 Utility 中拥有非共享成员(但你无法从共享成员访问那些非共享元素)。但仅针对共享成员而言,与使用 Module 相同。 - Idle_Mind
我也能够访问对象实例的 GetValue() 方法。这就是我的困惑所在。@Idle_Mind - Atanu Roy
1
澄清一下,您将收到一个警告,指出您不应该通过实例访问共享成员(根据您在Visual Studio中配置警告/错误的方式,它可能被视为错误)。实际上,您并没有真正通过实例访问共享成员,因为它会自动为您“固定”。 - Idle_Mind
2个回答

42

VB.NET模块是一个静态类。编译器会为您处理此操作。它上面的每个方法和属性都是静态的(Shared)。

具有静态(Shared)成员的类正是这样:具有静态(Shared)成员的类。您不必创建其实例即可访问静态(Shared)方法,但必须创建其实例才能访问任何实例成员。

您还可以在模块中定义Sub New(),并将其成为模块的静态构造函数。第一次尝试调用模块中的成员时,将调用静态构造函数以初始化静态类。


14

使用“shared”关键字来使一个类的子类或函数变为“静态”(按照C#中的定义)。 在VB中,上下文中,“shared”与“static”是近义词。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接