【问题标题】:Static Method implementation in VB.NETVB.NET 中的静态方法实现
【发布时间】: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的类和对象都可以使用

现在我的问题是:

  1. 我所做的实现是否可能违反模块提供的静态类的任何特性?
  2. 这和实现一个模块有什么区别?
  3. 如果我改为创建一个模块,其范围会与此类相同吗?我想在整个项目以及引用该方法的其他项目中访问该方法。

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

【问题讨论】:

  • 在幕后,Module中的Public函数被转换为Class的Shared函数;他们是一样的东西。即使 Utility 可以被实例化,您也不能通过 Utility 的实例访问 GetValue();你仍然必须使用Utility.GetValue()。
  • 主要区别在于,使用类,您还可以在实用程序中拥有非共享成员(尽管您无法从共享元素访问这些非共享元素)。但是对于仅 Shared 成员,它与使用 Module 相同。
  • 我也可以访问对象实例的GetValue() 方法。这就是我的困惑出现的地方。 @Idle_Mind
  • 澄清,您将收到一个警告,您不应该通过实例访问共享成员(取决于您在 Visual Studio 中如何配置警告/错误,它可能被视为一个错误)。实际上,您并没有真正通过实例访问共享成员,因为它是自动为您“修复”的。

标签: .net vb.net static


【解决方案1】:

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

一个带有静态(共享)成员的类就是这样:一个带有静态(共享)成员的类。您不必创建它的实例来访问静态(共享)方法,但您必须访问它的任何实例成员。

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

【讨论】:

    【解决方案2】:

    使用“共享”使类子或函数“静态”(在 C# 意义上)。 在 VB 中,在这种情况下,共享就像静态的同义词。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-30
      • 1970-01-01
      • 2011-05-10
      相关资源
      最近更新 更多