Classic
public delegate decimal MathOp(decimal left, decimal right)
public static decimal Add(decimal left, decimal right)
{
return left + right;
}
private static MathOp GetOp(char op)
{
switch (op)
{
case '+': return Add;
}
}
Interfaces
public interface IMathOp
{
decimal Compute(decimal left, decimal right);
}
public class AddOp : IMathOp
{
decimal Compute(decimal l, decimal r)
{
return l + r;
}
}
private static MathOp GetOp(char op)
{
switch (op)
{
case '+': return new AddOp();
}
}
Anonymous Methods
public delegate decimal MathOp(decimal left, decimal right)
private static MathOp GetOp(char op)
{
switch (op)
{
case '+': return delegate (decimal l, decimal r) { return l + r};
}
}
Generic Delegates and Lambda Expressions
public static Func<decimal, decimal, decimal> GetOp(char op)
{
switch (op)
{
case '+': return (l, r) => l + r;
}
}
For complete details, see Dave Fancher PluralSight course Functional Programming with C#