Как заменить / переопределить класс в том же пространстве имен - PullRequest
2 голосов
/ 05 ноября 2011

По сути, у меня есть класс, определенный на моем сайте, который содержит группу Enums для определения некоторых постоянных чисел. Всякий раз, когда веб-сайт обновляется до новой версии, он будет (и должен) использовать исходное определение класса. В некоторых редких случаях мне нужно перезаписать значения этих 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 ]

2 голосов
/ 05 ноября 2011

если эти значения меняются, лучше проектируйте приложение как настраиваемое. Вы можете использовать файл веб-конфигурации или другую конфигурацию xml или DB.

1 голос
/ 05 ноября 2011

При использовании перечислений, которые можно рассматривать как «константы», вы обычно не меняете значения.

Вы можете либо создать класс с виртуальными свойствами 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; } }
}

Если вам нужны статические геттеры, вы не сможете создать наследование, а вместо этого должны загружать ваши интты откуда-либо еще, например, из конфигурации указанных выше классов.

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