我是否可以像这样使用一个类(仅针对设计/指南)?我正在使用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
的缺点就完全消失了。
const
定义常量值时,有一个通用的指导原则:如果这些常量值不需要在汇编之外访问,则将其声明为。internal static class Pages
{
public const string Home = "Home.xaml";
public const string View2 = "View2.xaml";
/* a few more... */
}
从设计的角度来看,如果使用单个静态对象来包含所有页面引用,可能会很快变得混乱。您不可以将其存储在实际的页面对象中吗?
class view2 {
public const string PageName = "View2.xaml";
... other stuff ...
}
goTo(view2.PageName);
我认为这是你可以做的最好的事情之一。
更多建议:对于字符串,使用const
是完全可以的。如果您想使用不同类型,请使用static readonly
,然后在static
构造函数中初始化。
对于使用枚举的不同方法,请参见this thread。由于您尝试做的事情看起来很像一个字符串枚举,所以这可能是您要走的路。
不要忘记,只要在代码中指定页面,进行更改(例如重命名或移动页面)就会很麻烦。考虑使用类似资源或站点地图的东西。 (如果您仅将该类用于页面列表,则我建议使用C#的强类型资源 - 它们将以与您的类相同的方式运行,而无需手动编写它们。)
static readonly
而不是const
,因为这样您可以在之后更改值而无需重新编译。 - mgronber