是否可以使用这样的类(特定于设计/指南)?我正在使用MVVM模式。
public static class Pages
{
public const string Home = "Home.xaml";
public const string View2 = "View2.xaml";
/* a few more... */
}
答案 0 :(得分:34)
const
和public static readonly
之间存在显着差异,您应该考虑谨慎使用哪些内容:
(在这里,“客户”,我的意思是“代表成员的不同程序集中的代码。”
const
时,它们仍将使用原始值。使用public static readonly
,他们会看到更新后的值。如果你无论如何重新编译所有客户端,这不是问题。const
表单是编译时常量,这意味着它可用于:
如果您希望在更改值时重新编译所有客户,则第二个要点的好处将指向使用const
。
当然,我想知道Pages
是否真的需要公开......听起来像是internal
,internal
成员 - 此时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#的强类型资源 - 它们将在与您的班级相同,您不必手动编码。)