c# - 我可以消除以下派生类的重复代码并移至抽象基类吗
问题描述
我有一个抽象基类,开始一个timer
所有派生类共有的,
public abstract class BaseClass
{
public virtual void Start() { _timer.Start(); }
}
现在我需要为每个派生类加载不同的 JSON 配置文件并创建文件,
public class DerivedClass1 : BaseClass
{
private readonly List<config> configs = new List<config>();
public DerivedClass1()
{
configs = JsonSettings.GetConfigurations(@"./Configurations/1.json");
}
public override void Start()
{
base.Start();
foreach (var configuration in configs)
{
JsonSettings.CreateConfigFile(configuration);
}
}
}
public class DerivedClass2 : BaseClass
{
private readonly List<config> configs = new List<config>();
public DerivedClass2()
{
configs = JsonSettings.GetConfigurations(@"./Configurations/2.json");
}
public override void Start()
{
base.Start();
foreach (var configuration in configs)
{
JsonSettings.CreateConfigFile(configuration);
}
}
}
正如我所见,有很多代码在各种派生类中重复。
我可以移动这些代码以及abstract base
类还是有其他方法?
解决方案
我认为您可以将代码简化为:
public abstract class BaseClass
{
protected virtual List<config> configs { get; set; } = new List<config>();
public virtual void Start()
{
_timer.Start();
foreach (var configuration in configs)
{
JsonSettings.CreateConfigFile(configuration);
}
}
}
public class DerivedClass1 : BaseClass
{
public DerivedClass1()
{
configs = JsonSettings.GetConfigurations(@"./Configurations/1.json");
}
}
public class DerivedClass2 : BaseClass
{
public DerivedClass2()
{
configs = JsonSettings.GetConfigurations(@"./Configurations/2.json");
}
}
推荐阅读
- bioinformatics - 执行检查点中间命令
- asp.net-core - 如果不满足条件,则从公共异步任务 OnGetAsync() 重定向到不同的 Razor 页面
- c# - 添加 Claims Transformer 后注入的 IPrincipal Claims 为空
- javascript - Date.parse() 与 moment().unix()
- python - Django 从视图中创建和输出 txt 文件
- reactjs - 将 gtm id 动态传递给 head 部分的 gtm 脚本
- flutter - 如何在颤动的弹出小部件下使整个屏幕处于非活动状态(变暗)(类似于 showDialog)?
- ios - iOS 约束在标签的模拟器上被打破
- docker - 将文本文件从 docker 容器复制到主机
- apache-spark - Spark 上下文在等待后端时停止