定数を使用することにより値に名前を付けることが出来ます。そうすることにより、値が何を表しているのかがわかりやすくなり、保守もしやすくなります。こんな便利な定数にも使用する上で注意しなければいけないことがあります。

 それは、他のアセンブリ内の定数を直接参照しているアセンブリがあったとします。そこに仕様変更などにより、定数の値を変更した場合に定数を使用している側のソースもビルドしない限り、定数の値は変わらないということです。なぜなら、定数を使用しているソースをビルドした際に直接そのアセンブリに埋め込まれる為です。それでは簡単な例を見てみましょう。

 VB.exe が CSharp.dll の定数の値を表示するだけの、単純なアプリケーションを作成します。

VB.exe
Public Sub Main()
    MessageBox.Show(CSharp.Version)
End Sub
CSharp.dll
Public Class CSharp
    Public Const Version As String = "1.0"
End Class

 VB.exe を実行してみると「1.0」と表示されます。ここで CSharp.dll の Version を "2.0" に変更し、CSharp.dll のみをビルドします。

VB.exe
Public Sub Main()
    MessageBox.Show(CSharp.Version)
End Sub
CSharp.dll
Public Class CSharp
    Public Const Version As String = "2.0"
End Class

 VB.exe を実行してみると「1.0」と表示されます。結果が変わっていません。今度は CSharp.dll と VB.exe をビルドします。そして VB.exe を実行してみると「2.0」と表示されました。

 このように定数を利用する上で注意しなければいけないことがわかったと思います。同様に列挙型についても同じことが言えます。定数や列挙型などの値に変更が発生した場合は、参照元と参照先の両方をビルドするようにしましょう。