关于c#:公共const字符串?

Public const string?

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

1
2
3
4
5
6
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形式是编译时常量,这意味着它可以用于:
    • 属性参数
    • switch语句
    • 可选参数声明

如果您愿意重新编译所有客户,如果您更改了值,那么第二个要点的好处就指向使用const

当然,我想知道,不管怎样,Pages是否真的需要公开……这听起来像是internal的成员,在internal成员的情况下,const的缺点完全消失了。


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

1
2
3
4
5
class view2 {
    public const string PageName ="View2.xaml";

    ... other stuff ...
}

然后沿着…的线叫它…

1
goTo(view2.PageName);


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

1
2
3
4
5
6
internal static class Pages
{
    public const string Home ="Home.xaml";
    public const string View2 ="View2.xaml";
    /* a few more... */
}


我认为这是你能做的最好的事情之一。还有一些建议:对于字符串,使用consts是非常好的。如果您想使用不同的类型,请使用static readonly,然后在static构造函数中初始化。

有关使用枚举的其他方法,请参阅此线程。因为您所要做的看起来非常像字符串枚举,所以这可能是适合您的方法。

而且不要忘记,只要在代码中指定页面,进行更改(例如重命名或移动页面)将是一种痛苦。考虑使用资源或站点地图之类的东西。(如果您只将类用于页面列表,我将继续使用C的强类型资源-它们的行为方式与您的类相同,您不必手工编码。)