公共const字符串?

是否可以使用这样的类(特定于设计/指南)? 我正在使用MVVM模式。

public static class Pages { public const string Home = "Home.xaml"; public const string View2 = "View2.xaml"; /* a few more... */ } 

constpublic static readonly之间存在显着差异,您应该考虑小心使用哪个:

(在这里,“客户”,我的意思是“代表成员的不同程序集中的代码。)

  • 如果更改值但不重新编译客户端,则在使用const它们仍将使用原始值。 使用public static readonly ,他们将看到更新的值。 如果你无论如何重新编译所有客户端,这不是问题。
  • 只有const表单是编译时常量,这意味着它可以用于:
    • 属性参数
    • 切换语句
    • 可选参数声明

如果你很高兴重新编译你的所有客户,如果你改变了价值,第二个要点的好处指向使用const

当然,我想知道Pages是否真的需要公开……听起来像是internal成员, internal成员 – 这时const的缺点完全消失了。

从您的问题的设计角度来看,使用单个静态对象来包含所有页面引用似乎很快就会变得混乱。 你能不能只将它存储在实际的页面对象中?

 class view2 { public const string PageName = "View2.xaml"; ... other stuff ... } 

然后按照……的方式来称呼它

 goTo(view2.PageName); 

使用const定义常量值时的一般准则。 是否要在assembly外访问这些常量? 如果没有,则将其声明为

 internal static class Pages { public const string Home = "Home.xaml"; public const string View2 = "View2.xaml"; /* a few more... */ } 

我认为这是你能做的最好的事情之一。 一些更多的建议:使用字符串,使用const是完全没问题的。 如果您想要使用不同的类型,请使用static readonly ,然后在static构造函数中初始化。

对于使用枚举的其他方法,请参阅此主题 。 因为你要做的事情看起来很像字符串枚举,这可能是你的选择。

并且不要忘记,只要您在代码中指定页面,进行更改(例如重命名或移动页面)将是一件痛苦的事。 考虑使用资源或站点地图等内容。 (如果你使用该类作为页面列表, 我会使用C#的强类型资源 – 它们的行为与你的类相同,你不必手动编写它们。)