Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/266.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何替换/重写同一命名空间中的类_C#_Asp.net_.net_Enums_Overriding - Fatal编程技术网

C# 如何替换/重写同一命名空间中的类

C# 如何替换/重写同一命名空间中的类,c#,asp.net,.net,enums,overriding,C#,Asp.net,.net,Enums,Overriding,基本上,我在我的网站上定义了一个类,它包含一组枚举来定义一些常量。每当网站更新到新版本时,它将(并且应该)使用原始类定义。在一些罕见的情况下,我需要覆盖每个网站的这些枚举值。所以我想我可以把一个定制的文件放到网站上,用“override”语句重新定义原始类,这样原始文件将始终保持不变,但不会被使用 但是,当我添加文件时,它当然会抛出错误:“className”已经包含了“enumName”的定义 如有任何帮助/想法,将不胜感激 例如: public enum PageIDs { Logi

基本上,我在我的网站上定义了一个类,它包含一组枚举来定义一些常量。每当网站更新到新版本时,它将(并且应该)使用原始类定义。在一些罕见的情况下,我需要覆盖每个网站的这些枚举值。所以我想我可以把一个定制的文件放到网站上,用“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属性的类,或者加载未处理异常提到的一些配置文件

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

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; } }
}

能否提供一个示例,说明如何在新版本中更改枚举值?所以只需将旧的枚举和新的枚举添加到问题中即可。是的,谢谢您,我想我必须将这些设置保存在配置数据库表中。一开始我没有这样做,因为一旦它被部署(在每个网站的值上),这些值就不会改变。谢谢你的帮助。由于UnhandledException首先提出了这一点,我将以他的回答为准,但您的评论也很有帮助。