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

本文关键字:命名空间 同一个 覆盖 何替换 替换 | 更新日期: 2023-09-27 18:13:32

基本上,我有一个类定义在我的网站,其中包含一堆枚举来定义一些常数。每当网站更新到新版本时,它将(也应该)使用原始的类定义。在一些罕见的情况下,我需要覆盖每个网站的这些枚举值。所以我想我可以把一个自定义的文件放到网站上,用"override"语句重新定义原始类,这样原始文件就会一直保持不变,但不会被使用。

然而,当我添加文件时,它当然会抛出错误:'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
} 

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

如果这些值正在变化,您最好将应用程序设计为可配置的。您可以使用web配置文件或其他配置xml或DB。

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

你的选择是要么创建一个带有虚拟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; } }
}