如何替换/覆盖同一名称空间中的类

时间:2011-11-05 12:04:44

标签: c# asp.net .net enums override

基本上,我在我的网站上定义了一个类,它包含一堆Enums来定义一些常数。每当网站更新到新版本时,它将(并且应该)使用原始类定义。在极少数情况下,我需要覆盖每个网站的这些枚举值。所以我想我可以将自定义文件放入网站,使用“覆盖”语句重新定义原始类,这样原始文件将始终保持不变,但不会被使用。

但是,当我添加文件时,它当然会抛出错误:'className'已经包含'enumName'的定义。

非常感谢任何帮助/想法。

示例:

public enum PageIDs
{
    Login = 2,
    SearchResults = 3,
    DocumentsLibrary = 4,
    Error = 5,
    PageNotFound = 6,
    NewsAndEvents = 7
} 

应替换为:

public enum PageIDs
{
    Login = 2,
    SearchResults = 3,
    DocumentsLibrary = 4,
    Error = 9,
    PageNotFound = 15,
    NewsAndEvents = 17
} 

2 个答案:

答案 0 :(得分:2)

如果这些值发生变化,您可以更好地将应用程序设计为可配置。您可以使用Web配置文件或其他配置xml或DB。

答案 1 :(得分:1)

使用可被视为“常量”的枚举时,通常不会更改值。

您的选择是创建具有虚拟int属性的类,或者将一些配置文件加载为UnhandledException提及。

使用下面的解决方案,您需要实例化类

public class BasePageIDs {
    public virtual int Login { get { return 2; } }
    public virtual int Search { get { return 3; } }
}

public class SpecializedPageIDs : BasePageIds {
    public override int Search { get { return 4; } }
}

如果你想要静态getter,你将无法创建继承,而应该从其他地方加载你的int,例如从上面的类的配置。

public static class PageIDs {
    public static int Login { get { /* load from configuration */ return config; } }
}