公共const字符串?

时间:2011-10-13 08:58:30

标签: c# mvvm

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

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

4 个答案:

答案 0 :(得分:34)

constpublic static readonly之间存在显着差异,您应该考虑谨慎使用哪些内容:

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

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

如果您希望在更改值时重新编译所有客户,则第二个要点的好处将指向使用const

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

答案 1 :(得分:3)

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

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

答案 2 :(得分:3)

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

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

    ... other stuff ...
}

然后按照......的方式来称呼它。

goTo(view2.PageName);

答案 3 :(得分:0)

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

对于使用枚举的其他方法,请参阅this thread。因为你想要做的事情看起来很像字符串枚举,这可能是你的方式。

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