这是计算器程序。检查我有:
public Interface IFunction{
string Name {get; }
double Eval();
}
并且
public class subtract:IFunction{
private double x,y;
public double Eval(){
return x - y;
}
public string Name{
get { return "subtract";}
}
}
public class add:IFunction{
private double x, y;
public double Eval(){
return x + y;
}
public string Name{
get { return "add";}
}
}
我必须编写具有字符串字段操作的类。对于该字符串字段的名称,我必须使用Name{ get; }
中的IFunction
,"add"
或"subtract".
如果是"减去",请执行减法运算,从Eval()
类调用subtract
方法等;如何在类Calculator
中对此方法进行多态调用?必须Calculator
类实现接口吗?
public class Calculator{
private double leftOperand, rightOperand;
private string operation;
public double Calculate(){
/*here must call Eval() from subtract or add, depending on `operation` */
}
}
答案 0 :(得分:0)
您可以Calculator
包含IFunction
:
private IList<IFunction> functions;
然后在调用Calculate
时迭代该列表:
IFunction function = functions.FirstOrDefault(f => f.Name == operation);
然后,如果它为null,则抛出异常或返回默认值。
正如@Rob在评论中所提到的,IFunction
需要一种方法来分配x
和y
值,这可以通过属性来实现:
public double X { get; set; }
或修改接口,以便Eval
方法接受它们作为参数:
double Eval(double x, double y);
因此,我将在Calculate
IFunction function = functions.FirstOrDefault(f => f.Name == operation);
if (function == null)
{
//Or return some default value
throw new ArgumentOutOfRangeException("operation", "Unable to find the operation in the list of available ones");
}
return Eval(leftOperand, rightOperand);