3

name=value形式で大量のデータを吐き出すAPIを使用しています。最初は、単純な文字列比較を行ってすべてを処理しました。

Sub ProcessData(ByVal name As String, ByVal value As String)
    If name = "thisname" Then
        DoThis(value)
    ElseIf name = "thatname" Then
        DoThat(value)
    End If
End Sub

しかし、処理する可能性のある20を超える名前があるため、これを維持するのはすぐに困難になりました。次のステップは、文字列をプライベートサブクラスで定義された定数に移動することでした。

 Private Class Parameters
     Private Sub New()
     End Sub

     Public Const ThisName As String = "thisname"
     Public Const ThatName As String = "thatname"

 End Class

そして、私のメソッドは次のようになります。

    Sub ProcessData(ByVal name As String, ByVal value As String)
        If name = Parameters.ThisName Then
            DoThis(value)
        ElseIf name = Parameters.ThatName Then
            DoThat(value)
        End If
    End Sub

これはすでに大きな飛躍でしたが、今では他のクラスでこれらの定数を使用できるようにする必要がある立場にいます。それらをグローバルクラスに移動することを躊躇していますが、別のオプションが表示されません。

グローバル定数はどこに行きますか?

4

2 に答える 2

5

定数はプライベートまたはフレンドである必要があります。失敗モードは、それらの値がILにコンパイルされることです。したがって、1つのアセンブリのバグ修正を作成し、パブリック定数を変更した場合、更新されたアセンブリを使用する他のアセンブリは引き続き古い値を使用します。非常に厄介な故障モード。

Public定数値が必要な場合は、ReadOnlyキーワードを使用する必要があります。

于 2012-04-19T20:02:34.347 に答える
4

これらは定数です。これは、誰もその値を変更できないことを意味します。
これらの定数が何を表しているのかを自問する必要があります。
それらがプログラムのあらゆる場所で必要とされるグローバルな情報である場合、それらをグローバルな共有クラスに入れることに異論はありません。
それらの意味をよりよく理解するために、XMLコメントでコメントし、コーディングを進めます。

于 2012-04-19T19:59:09.327 に答える