公共const字符串?
是否可以使用这样的类(特定于设计/指南)? 我正在使用MVVM模式。
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
的缺点完全消失了。
从您的问题的设计角度来看,使用单个静态对象来包含所有页面引用似乎很快就会变得混乱。 你能不能只将它存储在实际的页面对象中?
class view2 { public const string PageName = "View2.xaml"; ... other stuff ... }
然后按照……的方式来称呼它
goTo(view2.PageName);
使用const
定义常量值时的一般准则。 是否要在assembly外访问这些常量? 如果没有,则将其声明为
internal static class Pages { public const string Home = "Home.xaml"; public const string View2 = "View2.xaml"; /* a few more... */ }
我认为这是你能做的最好的事情之一。 一些更多的建议:使用字符串,使用const
是完全没问题的。 如果您想要使用不同的类型,请使用static readonly
,然后在static
构造函数中初始化。
对于使用枚举的其他方法,请参阅此主题 。 因为你要做的事情看起来很像字符串枚举,这可能是你的选择。
并且不要忘记,只要您在代码中指定页面,进行更改(例如重命名或移动页面)将是一件痛苦的事。 考虑使用资源或站点地图等内容。 (如果你只使用该类作为页面列表, 我会使用C#的强类型资源 – 它们的行为与你的类相同,你不必手动编写它们。)