0

我有这个代码:

Public Class Beryllium
    Public Const AtomicNumber As Byte = 4
    Public Const Symbol As String = "Be"
    Public Const Name As String = "Beryllium"
    Public Const AtomicMass As Double = 9.012182

    Public Const List = AtomicNumber & vbNewLine & Symbol & vbNewLine & Name & vbNewLine & AtomicMass 'This line
End Class

我想列出所有常量(AtomicNumber、Symbol、Name 和 AtomicMass)。我想让列表也成为一个常数。当我运行上面的代码时,我收到一个突出显示 AtomicNumber 的错误(在我评论“这一行”的那一行)。我尝试了 .ToString() 和 CStr() 但我都得到了错误。也许有一种不同的方法可以使这些常量成为一个字符串或列表(必须是公共的并且有新的行)?有任何想法吗?谢谢。

4

2 回答 2

1

创建List一个只读属性。

这将允许您使用ToString().AtomicNumber

Public ReadOnly Property List() As String
  Get
    Return AtomicNumber.ToString() & vbNewLine & Symbol & vbNewLine & Name & vbNewLine & AtomicMass
  End Get
End Property
于 2012-04-27T17:46:33.423 回答
1

您不能在常量表达式中执行此操作,因为常量表达式需要在编译时计算值。但是,double 的“ToString()”值在编译时是未知的,因为 ToString 是 Double 类在运行时运行的方法。所以,编译器不知道它最终会返回什么。但是,.NET 具有readonly处理此类情况的修饰符。如果您将线路更改为:

Public Shared ReadOnly List = AtomicNumber & vbNewLine & Symbol & vbNewLine & Name & vbNewLine & AtomicMass 

你会看到它会起作用。这个只读字段在类加载到内存后立即计算,并且不能被任何客户端更改,因此它几乎等同于 const。当然,唯一的区别是,您在计算该值时会产生一些开销。此外,使用 consts,编译器可以执行一些其他优化,例如直接替换常量值而不是取消引用它。即,如果您的代码说:

Public Const Name As String = "Beryllium"

If (something = Name)...

如果您查看编译后的代码,它实际上会说:

If (something = "Beryllium")
于 2012-04-27T17:56:42.260 回答