Я работал над небольшим проектом, в котором я создал стандартные реализации надстроек для системы. Эти стандартные реализации настраивают такие вещи, как ведение журнала, конфигурация и т. Д. c. все единообразно. Все с учетом удобства обслуживания и возможности повторного использования.
Теперь я сейчас борюсь с тем, как обрабатывать имена настроек. Прежде чем я всегда создавал вложенный класс Settings
в с, я объявил некоторые константные строковые значения, такие как
public const string BananaSetting = "BananaSetting";
, так что я почти никогда не мог неправильно ввести имя параметра.
У меня, однако, есть базовый класс, который должен иметь параметр DEBUG для использования в качестве общего параметра c debug-enable; но также и параметры c, определенные для дополнения, которые существуют только для этого дополнительного модуля c. Поскольку я основываю каждый производный класс на классе, который имеет вложенный класс с настройкой DEBUG, любой производный класс, который пытается объявить похожий вложенный класс с именем Settings
, вызовет предупреждение компилятора:
DerivedClass. Настройки скрывают унаследованный член 'BaseClass.Settings'. Используйте новое ключевое слово, если целью было скрытие.
Но я не хочу его скрывать. То, что я действительно хотел бы сделать, это объединить два класса настроек в один. Есть ли способ сделать это, или существует какой-то существующий шаблон проектирования, чтобы сделать это правильно?
public abstract class BaseClass
{
public class Settings
{
public const string BananaSetting = "BananaSetting";
}
public abstract void BaseAbstractMethod();
public void BaseMethod()
{
// intended use
var settingValue = settingsDictionary[Settings.BananaSetting];
}
}
public class DerivedClass : BaseClass
{
public class Settings
{
public const string DerivedBananaSetting = "DerivedBananaSetting";
}
public override void BaseAbstractMethod()
{
// intended use
var settingValue = settingsDictionary[Settings.BananaSetting];
var subSettingValue = settingsDictionary[Settings.DerivedBananaSetting];
}
}