【发布时间】:2017-11-15 10:37:44
【问题描述】:
我目前正在建立一个架构,该架构应该允许我设置一个抽象基类的多个派生类。这些类将实现方法的实际逻辑并为属性赋值。
我有一个模型,它应该根据属性实现相关类的特定逻辑。
public abstract class AbstractLogic
{
protected String Prop1 { get; set; }
public abstract String Method1();
}
public class ActualLogic : AbstractLogic
{
public ActualLogic()
{
Prop1 = "Test";
}
public override string Method1()
{
throw new NotImplementedException();
}
}
public class Model
{
public string LogicType { get; set; }
private AbstractLogic Logic { get; set; } //I need to have something like this to use the logic inside of the model
}
我想以通用方式使用这些类,例如在某处调用 Model.logic.Method1(),它应该从 ActualLogic 类中提取逻辑
我对这种架构的问题是,当我加载Model 时,Logic 属性始终是null,因此使用它非常困难并且感觉不一致。
我真的无法找到更好的解决方案,所以也许有人可以帮助我解决这个问题。也许界面会更好?还是泛型类?我都试过了,但都没有更好的结果。
提前谢谢你。
编辑
将我自己的答案移到一个答案中。
【问题讨论】:
-
这里不需要泛型,因为抽象类已经定义了你的模型应该使用的接口。您需要先实例化您的
Logic属性,然后才能使用它。 -
在你的模型中添加一个构造函数来初始化它 -
public Model() { Logic = new ActualLogic(); } -
没有为 ActualLogic 创建实例,Logic = new ActualLogic();在Model的构造函数中
-
答案在答案部分,而不是问题
标签: c# .net architecture abstract