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

常量应该是 Private 或 Friend。失败模式是它们的值被编译到 IL 中。因此,如果您为一个程序集创建错误修复并更改公共常量,那么其他使用您更新的程序集的程序集仍然使用旧值。非常讨厌的故障模式。

如果您需要一个公共常量值,那么您应该使用 ReadOnly 关键字。

于 2012-04-19T20:02:34.347 回答
4

这些是常数。这意味着没有人可以改变他们的价值。
你应该问问自己这些常数代表什么。
如果它们是程序中到处都需要的全局信息,那么将它们放在全局共享类中是没有异议的。
为了更好地理解它们的含义,我将使用 XML 注释对它们进行注释并继续进行编码。

于 2012-04-19T19:59:09.327 回答