2011-10-13 70 views
14

可以使用这样的类(设计/指南特定)吗?我正在使用MVVM模式。公共const字符串?

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

对于公开的可见性,我宁愿把'static readonly'改为'const',因为那样你就可以在不需要重新编译的情况下改变这个值。 – mgronber

+3

@mgronber:这取决于上下文。在我开发的大多数情况下,如果更改一个程序集,则最终会在使用新版本之前重新编译该程序集的客户端。 –

回答

24

constpublic static readonly之间显著的差别,你应该考虑其中小心使用:在不同的

(通过“客户端”在这里,我的意思是“代码装配指成员。)

  • 如果更改了值,但不重新编译的客户,如果你使用const他们仍然使用原来的价值。随着public static readonly,他们将看到更新后的值。如果重新编译所有客户任何方式,这不是问题。
  • 只有const形式是一个编译时间常数,这意味着它可以用在:
    • 属性参数
    • switch语句
    • 可选参数声明

如果”很高兴重新编译所有的客户,如果你改变了价值,第二个项目符号点的好处是使用const

当然,我不知道Pages真的是否需要是公共反正...听起来有点像这可能是internal,与internal成员 - 此时的const的缺点完全消失。

2

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

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

在给出“使用静态只读而不是const”的通用建议之前,肯定值得理解利弊。考虑一下如果组件X发生变化,所有客户端都将被重建 - 这是业务中相当常见的上下文。这是否改变了你的建议? –

+0

@JonSkeet这不是你必须使用只读的东西!我已经回答了一个问题。我并不认为在这种情况下公开课是必要的,所以我建议使用内部课程。另外,我认为了解const和readonly的工作方式非常有用,因此,项目的链接。无论如何,我应该同意你在这里提出的建议。 :-) – AksharRoop

+2

那么,你基本上说:“如果它需要公开,请使用公共静态只读。”如果有人在阅读本网站时没有发现有效的C#,那么即使它应该公开,实际上它不适用的建议也不会立即得到启发。 –

2

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

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

    ... other stuff ... 
} 

然后调用它的线沿线的...

goTo(view2.PageName); 
0

我觉得这是你能做的最好的事情之一。 一些更多的建议:使用字符串,使用const s是完全正确的。如果您想使用不同类型,请使用static readonly,然后在static构造函数中进行初始化。请参阅this thread。因为你想要做的事情看起来很像一个字符串枚举,这可能是你的方式。

不要忘记,只要您在代码中指定页面,进行更改(例如重命名或移动页面)将会很痛苦。考虑使用资源或站点地图等。 (如果你使用类的页列表,我会使用C#的强类型资源去 - 他们的行为以同样的方式为你的类,你不会有他们的代码)

相关问题