【问题标题】:How to handle strings that are accessible application wide?如何处理可在应用程序范围内访问的字符串?
【发布时间】:2015-07-17 22:01:58
【问题描述】:

我正在开发 WPF Prism 应用程序,在两种情况下,最好使用可跨系统访问的字符串。

首先是我的观点的名称。在设置视图以及导航到视图时使用视图的名称。我想避免视图名称中的拼写错误。这些名称也有可能在未来发生变化,依靠内存来查找使用该视图的每个实例并不是一个好主意。第二种情况是针对不同声明的名称,在基于声明的身份验证的意义上。

我是否应该将它们创建为常量,尽管字符串可能会发生变化?也许将它们设为只读会更好?感谢您的意见!

【问题讨论】:

    标签: c# wpf


    【解决方案1】:

    我肯定会为此在通用程序集中使用存储类。像这样:

    public static class Claims
    {
      public static readonly String View = "http://schemas.mycompany.com/claims/view";
      public static readonly String Edit = "http://schemas.mycompany.com/claims/edit";
      public static readonly String Upvote = "http://schemas.mycompany.com/claims/upvote";
    }
    

    微软使用类似的approach
    那只剩下一个困境:const vs readonly。我建议在你的情况下使用 readonly ,因为你说有可能改变。仅当数据实际上是常量时才应使用 Const,因为常量未被引用,而是复制到每个引用程序集。例如。如果您在程序集 A 中定义常量并在程序集 B 中使用它们,那么如果您在 A 中更改它们,则必须重新编译 B,否则 B 将保留这些常量的旧版本。

    【讨论】:

    • 谢谢!我将您的回复标记为答案,因为您专门解决了有关 const 与 readonly 的问题。
    【解决方案2】:

    我会创建一个包含所有常量的类,并将所有常量值保留在那里。您可以创建一个在所有其他项目之间共享的项目。

    【讨论】:

      【解决方案3】:

      通用程序集存储类可能很简单,可以满足您的需求,但您可能需要考虑使用 .resx 文件。它本质上是一个 XML 格式文件,您可以在其中对字符串进行硬编码,然后您可以在代码中进行引用。 MSDN Documentation

      以下是使用它们的一些令人信服的理由:

      • 资源文件通过根据用户的区域设置自动确定要使用的语言 resx 文件,为您提供本地化/国际化 .net 应用程序的简便方法。要添加更多语言,只需添加另一个已翻译的资源文件。

      • 资源文件为您提供了一个存储字符串、文件和脚本的中心位置,并以强类型的方式引用它们(因此,如果您不正确地引用它们,编译将会中断)。

      • 资源文件可以编译成附属程序集,从而可以轻松更改生产应用程序中的资源,而无需重新编译整个东西。

      What are the benefits of resource resx files?

      你可以这样从 resx 中读取:

      var <Variable Name> = Namespace.Properties.Resources.<Resource Name>
      

      【讨论】:

        【解决方案4】:

        我对给出的答案感到困惑。所有 UI 字符串都应始终位于字符串表中。这就是它的用途。其可访问的系统范围。此外,您还可以进行本地化。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2017-05-09
          • 2014-09-14
          • 2011-08-17
          • 2016-09-01
          • 1970-01-01
          • 1970-01-01
          • 2011-02-23
          相关资源
          最近更新 更多