C#学习记录002

虚方法、重写方法和抽象方法

//虚方法、重写方法和抽象方法
public abstract class Expression     //表达式
{
   public abstract double Evaluate(Dictionary<string,object> vars);   //抽象方法,要重写
}

public class Contant : Expression   //常量
{
     double _value;   //全局变量
	 
	 public Contant(double value)   //构造函数
	 {
	     _value = value;
	 }
	 
	 public override double Evaluate(Dictionary<string,object>vars)   //重写抽象方法
	 {
	      return _value;
	 }
}

public class VariableReference : Expression    //变量
{
      string _name;
	  
	  public VariableReference(string name)   //构造函数
	  {
	       _name =  name;
	  }
	  
	  public override double Evaluate(Dictionary<string,object> vars)     //重写抽象方法
	  {
	        object value = vars[_name] ?? throw new Exception($"Unknown variable : {_name}");
	        return Convert.ToDouble(value);
	  }
}

public class Operation : Expression     //进行运算
{
    Expression _left;    //表达式左边
	char _op;            //操作符
	Expression _right;   //表达式右边
	
	public Operation(Expression left,char op,Expression right)   //构造函数
	{
	     _left = left;
		 _op = op;
		 _right = right;
	}
	
	public override double Evaluate(Dictionary<string,object> vars)   //重写抽象方法
	{
	    double x = _left.Evaluate(vars);
		double y = _right.Evaluate(vars);
		switch(_op)
		{
		     case '+': return x + y;
			 case '-': return x - y;
			 case '*': return x * y;
			 case '/': return x / y;
			 
			 default: throw new Exception("Unknown opertator");
		}
	}
}

Expression e = new Operation(
     new  VariableReference("X"),
	 '+',
	 new Constant(3));
	
	
//计算 x*(y + 2)
Expression e = new Operation(
    new VariableReference("x"),
	'*',
	new Operation(
	    new VariableReference("y"),
		'+',
		new Constant(2)
	)
);
Dictionary<string,object>vars = new();
vars["x"] = 3;
vars["y"] = 5;
Console.WriteLine(e.Evaluate(vars));
vars["x"] = 1.5;
vars["y"] = 9;
Console.WriteLine(e.Evaluate(vars));
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值