using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace four_GreateDelegate
{
//创建委托
public delegate double Calc(double x, double y);
internal class Program
{
//创建委托(嵌套类)
//public delegate double Calc(double x,double y);
static void Main(string[] args)
{
Calculator calculator = new Calculator();
//若是嵌套类,使用的时候要加上类名
//假如是嵌套类,为什么在这里不需要加上类名也可以使用?
//因为我们在这个类里面,所以不需要加上
//Program.Calc Calc1 = new Calc(calculator.Add);
Calc calc1 = new Calc(calculator.Add);
Calc calc2 = new Calc(calculator.Sub);
Calc calc3 = new Calc(calculator.Mul);
Calc calc4 = new Calc(calculator.Div);
double a = 100;
double b = 200;
double z = 0;
//委托的间接调用
z = calc1.Invoke(a, b);
Console.WriteLine(z);
z = calc2.Invoke(a, b);
Console.WriteLine(z);
z = calc3.Invoke(a, b);
Console.WriteLine(z);
z = calc4.Invoke(a, b);
Console.WriteLine(z);
Console.WriteLine("*****************************************");
//函数指针方式
z = calc1(a, b);
Console.WriteLine(z);
z = calc2(a, b);
Console.WriteLine(z);
z = calc3(a, b);
Console.WriteLine(z);
z = calc4(a, b);
Console.WriteLine(z);
}
}
class Calculator
{
public double Add(double x,double y)
{
double result = x + y;
return result;
}
public double Sub(double x, double y)
{
double result = x - y;
return result;
}
public double Mul(double x, double y)
{
double result = x * y;
return result;
}
public double Div(double x, double y)
{
double result = x / y;
return result;
}
}
}
1、委托(delegate)是一种类(class),类是数据类型,所以委托也是一种数据类型
2、它的声明方式与一般的类不同
3、注意声明委托的位置
4、委托与所封装的方法必需"类型兼容"