【发布时间】:2020-06-03 07:30:38
【问题描述】:
我正在从事一个小项目,我在该项目中为系统创建了附加组件的标准实现。这些标准实现将以统一的方式设置日志记录、配置等。所有这些都考虑到了可维护性和可重用性。
现在我正在努力解决的问题是如何处理设置名称。在我总是创建一个嵌套类 Settings 之前,我声明了一些 const 字符串值,例如
public const string BananaSetting = "BananaSetting";
所以我几乎再也不会拼错设置的名称了。
然而,我有一个基类,它应该有一个名为 DEBUG 的设置,用作通用调试启用设置;还有附加组件特定的设置,这些设置只存在于那个特定的附加组件中。
看到我将每个派生类都基于具有 DEBUG 设置嵌套类的类,任何试图声明类似嵌套类的派生类称为Settings 将触发编译器警告:
DerivedClass.Settings 隐藏继承的成员“BaseClass.Settings”。如果要隐藏,请使用 new 关键字。
但我不想隐藏它。我真正想做的是将两个设置类合二为一。有没有办法做到这一点,或者是否有某种现有的设计模式可以正确地做到这一点?
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];
}
}
【问题讨论】:
-
为更多说明向我们展示一些代码。
-
@HamedMoghadasi 我在代码中添加了基本思想(这会导致编译器警告)。
标签: c# .net inheritance