using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication43
{
    class Program
    {
        delegate double ProcessDelegate(double paraml, double param2);

        static double Multiply(double param1, double param2)
        {
            return param1 * param2;
        }

        static double Divide(double param1, double param2)
        {   
            return param1 / param2;
        }

        static void Main(String[] args)
        {
            ProcessDelegate process;
            Console.WriteLine("输入2个数字");
            string input = Console.ReadLine();
            int commaPos = input.IndexOf(',');
            double param1 = Convert.ToDouble(input.Substring(0, commaPos));
            double param2 = Convert.ToDouble(input.Substring(commaPos + 1, input.Length - commaPos - 1));
            Console.WriteLine("M or D");
            string inputs = Console.ReadLine();
            if (inputs == "M")
            {
                process = new ProcessDelegate(Multiply);
            } else
            {
                process = new ProcessDelegate(Divide);
            }
            
            Console.WriteLine(process(param1, param2));
            Console.ReadLine();
        }
    }
}

对上面代码的理解:
我们声明的委派指定了将来的方法的参数,两个double类型的参数

process = new ProcessDelegate(Multiply);

这个是关键语句,通过向ProcessDelegate委派传递不同的方法,我们得到的process方法就会拥有不同的对参数的处理能力