假设我有一些相互依赖的常量,我决定将它们放在一个容器中,而不是将它作为一个类中的单个常量保存。
我认为对该范围使用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)
答案 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.NET的C# 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
其中Friend
是internal
的VB(Private
的限制只适用于类型成员)。