Основы объектно-ориентированного программирования на языке C# book | Page 187
8.5 Комплексна вправа до роздiлу 7
if (!input.IsEmpty() && input.Current == Symbol)
{
input.MoveNext();
return true;
}
else
return false;
}
}
public sealed class UnaryOp : Operation
{
private readonly char symbol;
private readonly Func f;
public UnaryOp(char symbol, Func f)
{
this.symbol = symbol;
this.f = f;
}
public override char Symbol { get { return symbol; } }
public override long Eval(params long[] args)
{
if (args.Length != 1)
throw new ArgumentException("Invalid number of
arguments of an unary operation");
return f(args[0]);
}
}
public sealed class BinaryOp : Operation
{
private readonly int priority;
private readonly char symbol;
private readonly Func f;
public int Priority { get { return priority; } }
public override char Symbol { get { return symbol; } }
public BinaryOp(int priority, char symbol, Func f)
{
if (priority <= 0)
throw new ArgumentException("Priority must be > 0");
this.priority = priority;
this.symbol = symbol;
this.f = f;
}
public override long Eval(params long[] args)
{
if (args.Length != 2)
throw new ArgumentException("Invalid number of
arguments of a binary operation");
return f(args[0], args[1]);
}
}
187