VB.NET中常量的容器

时间:2010-06-29 10:27:15

标签: .net vb.net .net-2.0

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

我认为对该范围使用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

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

平台:VB.NET(.NET 2)

4 个答案:

答案 0 :(得分: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

注意:类的声明中需要NotInheritable,因为当您使用Module时,编译器将生成CIL。我更喜欢“标准 - .NET” - 而不是Visual Basic的东西。此外,您可以更好地控制其可访问性,并可以将其作为内部类。这实际上是VB.NETC# static class对应部分。

答案 1 :(得分:5)

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

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

答案 2 :(得分:1)

我建议你看一下文章 Constants in .NET ,然后决定你应该使用“const”,或者你应该选择“const”,而不是把它作为“const”。只读”。

答案 3 :(得分:-2)

enum可能是更好的选择。不确定VB语法,但C#将是:

internal enum BandSizes {
  BandHeight = HourHeight + 20,
  HourHeight = HalfHourHeight + 20,
  HalfHourHeight = LineHeight + PictureHeight + 20,
  PictureHeight = 20,
  LineHeight = StopHeight + 10,
  LineWidth = 50,
  StopHeight = 30,
}

(注意:如果这是命名空间范围,internal是限制性最强的访问,但如果是类或结构的成员,private是可能的。)

编辑:这是VB版本:

Friend Enum BandSizes
    BandHeight = HourHeight + 20
    HourHeight = HalfHourHeight + 20
    HalfHourHeight = LineHeight + PictureHeight + 20
    PictureHeight = 20
    LineHeight = StopHeight + 10
    LineWidth = 50
    StopHeight = 30
End Enum

其中Friendinternal的VB(Private的限制只适用于类型成员)。