源码如下:
vs2005测试可以运行:
using System;
public delegate double TestDelegate(int xx,int yy);
class Math{
public double sum(int a,int b)
{
int sum = a+b;
Console.WriteLine("sum={0}",sum);
return sum;
}
public double average(int a,int b)
{
int average = (a+b)/2;
Console.WriteLine("average={0}",average);
return average;
}
}
public class Test
{
public static void Main(string []args)
{
Console.Write("请输入第一个数:");
int a=int.Parse(Console.ReadLine());
Console.Write("请输入第二个数:");
int b=int.Parse(Console.ReadLine());
Math math = new Math();
TestDelegate Mathod1 = new TestDelegate(math.sum);
Mathod1(a,b);
TestDelegate Mathod2 = new TestDelegate(math.average);
Mathod2(a,b);
}
}
1、委托的返回值类型和参数类型必须和调用的方法的返回值类型和参数类型一致;
2、委托的使用类似于类,当new一个新的委托时,参数只有一个方法: TestDelegate Mathod1 = new TestDelegate(math.sum);
若要用同一个委托调用多个方法,使用委托多播,即+= /-=来实现;
3、定义委托时的多个参数在调用委托实例是体现:
public delegate double TestDelegate(int xx,int yy);
.......
Mathod2(a,b);
而不是在new委托时实现:
TestDelegate Mathod1 = new TestDelegate(math.sum);//new委托时只体现一个方法(好吧,说得墨迹了)
4、输入时直接输入两个数字,回车是换行而不是直接执行程序:
Console.Write("请输入第一个数:");
int a=int.Parse(Console.ReadLine());
Console.Write("请输入第二个数:");
int b=int.Parse(Console.ReadLine());