classProgram{
staticvoidMain(string[] args){
Calculator calculator =newCalculator();Action action =newAction(calculator.Report);
action.Invoke();action();//指针式写法Func<int,int,int> func1 =newFunc<int,int,int>(calculator.Add);Func<int,int,int> func2 =newFunc<int,int,int>(calculator.Sub);int x =100;int y =200;int z =0;
z = func1.Invoke(x, y);
z =func1(x, y);//指针式写法
Console.WriteLine(z);
z = func2.Invoke(x, y);
z =func2(x, y);//指针式写法
Console.WriteLine(z);}}}classCalculator{
publicvoidReport(){
Console.WriteLine("I have 3 methods.");}publicintAdd(int a ,int b){
int result=a+b;return result;}publicintSub(int a,int b){
int result = a - b;return result;}
委托的声明(自定义委托)
委托也是一种类,类是一种数据类型,所以委托也是一种数据类型
其声明方式和一般的类不同,主要是为了照顾可读性和C/C++传统
注意声明委托的位置
委托与所封装的方法必须“类型兼容”(返回值的数据类型,参数列表的个数和数据类型)
namespaceConsoleApp1{
publicdelegateintCalc(int x,int y);//委托声明,注意要和Program类同级classProgram{
staticvoidMain(string[] args){
Calculator calculator =newCalculator();Calc calc1 =newCalc(calculator.Add);Calc calc2 =newCalc(calculator.Sub);Calc calc3 =newCalc(calculator.Mul);Calc calc4 =newCalc(calculator.Div);int a =100;int b =90;int c;
c = calc1.Invoke(a, b);
Console.WriteLine(c);
c = calc2.Invoke(a, b);
Console.WriteLine(c);
c = calc3.Invoke(a, b);
Console.WriteLine(c);
c = calc4.Invoke(a, b);
Console.WriteLine(c);}}}class