using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Demo11
{
//委托
//是一种存储函数引用的类型,声明类似函数,但不带函数体,要使用delegate关键字
//声明委托指定了一个返回类型和一个参数列表,可以通过委托类型的变量调用函数
class Program
{
//delegate关键字指定该定义用于委托,不是用于函数
//指定返回类型和两个double参数,委托名称任意
delegate double ProcessDlegate(double param1, double param2);
static double Multiply(double param1, double param2) => param1 * param2;
static double Divide(double param1,double param2) => param1 / param2;
static void Main(string[] args)
{
ProcessDlegate process;
Console.WriteLine("enter two numbers:");
string input = Console.ReadLine();
int commaPos = input.IndexOf(',');
double param1 = Double.Parse(input.Substring(0, commaPos));
double param2 = Double.Parse(input.Substring(commaPos + 1,input.Length-commaPos-1));
Console.WriteLine("enter M to multiply or D to divide:");
input = Console.ReadLine();
if(input == "M")
{
//创建一个新的委托,把一个函数引用赋予委托变量
//指定委托类型,提供一个引用所虚函数的参数,参数是要使用函数名且不带括号
process = new ProcessDlegate(Multiply);
}
else
{
process = new ProcessDlegate(Divide);
}
Console.WriteLine($"Result:{process(param1, param2)}");
Console.ReadKey();
}
}
}