可以使用这样的类(设计/指南特定)吗?我正在使用MVVM模式。公共const字符串?
public static class Pages
{
public const string Home = "Home.xaml";
public const string View2 = "View2.xaml";
/* a few more... */
}
可以使用这样的类(设计/指南特定)吗?我正在使用MVVM模式。公共const字符串?
public static class Pages
{
public const string Home = "Home.xaml";
public const string View2 = "View2.xaml";
/* a few more... */
}
有const
和public static readonly
之间显著的差别,你应该考虑其中小心使用:在不同的
(通过“客户端”在这里,我的意思是“代码装配指成员。)
const
他们仍然使用原来的价值。随着public static readonly
,他们将看到更新后的值。如果重新编译所有客户任何方式,这不是问题。const
形式是一个编译时间常数,这意味着它可以用在:
如果”很高兴重新编译所有的客户,如果你改变了价值,第二个项目符号点的好处是使用const
。
当然,我不知道Pages
真的是否需要是公共反正...听起来有点像这可能是internal
,与internal
成员 - 此时的const
的缺点完全消失。
使用const
定义常数值时的一般准则。这些常量是否要在程序集外部访问?如果没有,那么它声明为
internal static class Pages
{
public const string Home = "Home.xaml";
public const string View2 = "View2.xaml";
/* a few more... */
}
在给出“使用静态只读而不是const”的通用建议之前,肯定值得理解利弊。考虑一下如果组件X发生变化,所有客户端都将被重建 - 这是业务中相当常见的上下文。这是否改变了你的建议? –
@JonSkeet这不是你必须使用只读的东西!我已经回答了一个问题。我并不认为在这种情况下公开课是必要的,所以我建议使用内部课程。另外,我认为了解const和readonly的工作方式非常有用,因此,项目的链接。无论如何,我应该同意你在这里提出的建议。 :-) – AksharRoop
那么,你基本上说:“如果它需要公开,请使用公共静态只读。”如果有人在阅读本网站时没有发现有效的C#,那么即使它应该公开,实际上它不适用的建议也不会立即得到启发。 –
从您的问题的设计角度来看,它似乎可以使用单个静态对象快速混乱以包含所有页面引用。你不能把它存储在实际的页面对象中吗?
class view2 {
public const string PageName = "View2.xaml";
... other stuff ...
}
然后调用它的线沿线的...
goTo(view2.PageName);
我觉得这是你能做的最好的事情之一。 一些更多的建议:使用字符串,使用const
s是完全正确的。如果您想使用不同类型,请使用static readonly
,然后在static
构造函数中进行初始化。请参阅this thread。因为你想要做的事情看起来很像一个字符串枚举,这可能是你的方式。
不要忘记,只要您在代码中指定页面,进行更改(例如重命名或移动页面)将会很痛苦。考虑使用资源或站点地图等。 (如果你只使用类的页列表,我会使用C#的强类型资源去 - 他们的行为以同样的方式为你的类,你不会有他们的代码)
对于公开的可见性,我宁愿把'static readonly'改为'const',因为那样你就可以在不需要重新编译的情况下改变这个值。 – mgronber
@mgronber:这取决于上下文。在我开发的大多数情况下,如果更改一个程序集,则最终会在使用新版本之前重新编译该程序集的客户端。 –