我目前正在建立一个架构,允许我设置抽象基类的多个派生类。这些类将实现方法的实际逻辑并为属性赋值。
我有一个模型应该根据属性实现尊重类的特定逻辑。
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
,因此使用它非常困难并且感觉不一致。
我无法真正解决一个更好的解决方案,所以也许有人可以帮我解决这个问题。也许界面会更好?还是通用类?我尝试了两种方法,但无法获得更好的结果。
提前谢谢。
修改
将我自己的答案移到答案上。
答案 0 :(得分:0)
我找到了一种更好的方法来访问正确的逻辑类: 在我的模型中,我定义了一个属性枚举LogicType,并且只使用扩展方法访问尊重的LogicClass。
user_id: bbbbb
现在我可以像public enum LogicType
{
actuallogic,
actuallogic2
}
public static class LogicExtensions
{
public static AbstractLogic LogicClass(this LogicType self)
{
switch (self)
{
case LogicType.actuallogic:
return new ActualLogic();
case LogicType.actuallogic2:
return new ActualLogic2();
default:
return null;
}
}
}