我正在尝试在 C# 中实现模板方法模式,以处理继承TemplateFilter类的所有子类之间的不同行为。
public abstract class TemplateFilter : Operand
{
public TemplateFilter(params string[] values) : base(setValues(values))
{}
public string setValues(params string[] values){
return formatResult(values);
}
public abstract string formatResult(params string[] values);
}
子类之一是:
public class Type3UnaryFilter : TemplateFilter
{
public Type3UnaryFilter(string value, string field) : base(new string[] { value, field }) { }
public override string formatResult(params string[] values)
{
//type{value}:field
return "type{"+values[0]+"}:"+values[1];
}
}
最后,类Operand:
public class Operand : IExpressionComponent
{
public string FilterStatement { get; private set; }
public Operand(string filterStatement)
{
this.FilterStatement = filterStatement;
}
public string evaluate()
{
return this.FilterStatement;
}
}
我的问题是我不能从TemplateFilter调用Operand构造函数,因为它需要 setValues 为 statc。另一方面,如果我将 setValues 设置为静态,我不能从TemplateFilter.setValues调用方法formatResult并让子类负责实现所需的行为。那么,为了在不改变架构的情况下实现这种机制,我能做些什么呢?