VB.NET中常量的容器

ser*_*hio 2 .net vb.net .net-2.0

假设我有一些相互依赖的常量,我决定将它们放在一个容器中,而不是将它作为一个单独的常量保存在一个容器中.

我认为使用a Structure作为该范围,但编译器强制我声明该结构的私有成员.

  ' Compile error: at least one private member is needed.
  Private Structure BandSizes 
    Const BandHeight As Short = HourHeight + 20
    Const HourHeight As Short = HalfHourHeight + 20
    Const HalfHourHeight As Short = LineHeight + PictureHeight + 20
    Const PictureHeight As Short = 20
    Const LineHeight As Short = StopHeight + 10
    Const LineWidth As Short = 50
    Const StopHeight As Short = 30
  End Structure
Run Code Online (Sandbox Code Playgroud)

因为我只有几个整数常量,我应该创建一个共享(静态)类吗?

平台:VB.NET(.NET 2)

Tim*_*ter 7

在我看来,为此目的的最佳选择是创建一个只包含共享,静态成员和常量的(私有)类.您无需创建对象,也可以根据需要控制辅助功能.

   Private NotInheritable Class BandSizes
        Public Const BandHeight As Short = HourHeight + 20
        Public Const HourHeight As Short = HalfHourHeight + 20
        Public Const HalfHourHeight As Short = LineHeight + PictureHeight + 20
        Public Const PictureHeight As Short = 20
        Public Const LineHeight As Short = StopHeight + 10
        Public Const LineWidth As Short = 50
        Public Const StopHeight As Short = 30

        Private Sub New()
        End Sub
    End Class
Run Code Online (Sandbox Code Playgroud)

注意:NotInheritable在类的声明中需要,因为它是使用模块时编译器将生成为CIL的内容.我更喜欢"标准 - .NET" - 而不是Visual Basic的东西.此外,您可以更好地控制其可访问性,并可以将其作为内部类.这实际上是C#静态类VB.NET对应物.

  • 为什么需要创建共享类的实例?您可以通过以下方式访问常量:Dim bandHeight As Short = BandSizes.BandHeight.根本没有类BandSizes的实例. (2认同)
  • 在 VB.Net 中,没有像 C# 中那样的静态/共享类,但是当类的每个成员都是共享/常量时,无论如何您都不需要它的实例。它就像一个静态类的 VB.Net 等价物。尝试建立我的班级,实际上你不能;) (2认同)

Han*_*son 5

既然它是VB.NET,如果它们是真正的全局常量并且它们的名字本身就足够了,你也可以创建一个模块来保存它们.

另外,请注意,如果从外部程序集访问这些常量,则可能会出现问题,如果这些常量的值可能会发生变化.因此,如果它们是公共的并放在类库中,那么将它们作为ReadOnly而不是常量可能更好.