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()を試しましたが、両方でエラーが発生します。たぶん、これらの定数を1つの文字列またはリストにする別の方法があります(公開されていて、新しい行が必要です)。何か案は?ありがとう。

4

2 に答える 2

1

定数式ではコンパイル時に値を計算する必要があるため、定数式でこれを行うことはできません。ただし、ToStringは実行時にDoubleクラスによって実行されるメソッドであるため、doubleの "ToString()"値はコンパイル時に不明です。したがって、コンパイラは、最終的に何が返されるかわかりません。ただし、.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 に答える
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 に答える