“委托”基础
在学习具体内容之前,先强调一下:
- 不学会委托(Delegate),等于没学.NET编程!
委托引例(FirstDelegateExample)
- 这是一个普通的类,它定义了两个将被委托变量接收的方法
public class MathOpt
{
public int Add(int x,int y)
{
return x+y;
}
public static int Max(int x,int y)
{
return x>y?x:y;
}
}
- 定义一个委托类型,它有两个int类型的参数,返回一个int类型的数值
public delegate int MathOptDelegate(int value1, int value2);
- 委托是一种用户自定义的数据类型,可以用于定义变量
MathOptDelegate oppDel;
- 委托变量可以接收一个方法引用
MathOpt obj = new MathOpt();
// 接收一个实例方法引用
oppDel = obj.Add;
// 接收一个静态方法引用
oppDel = MathOpt.Max;
- 委托变量可以当成普通方法那样调用
Console.WriteLine(oppDel(1,2)); // 输出3
- 可以定义委托类型的参数
static int UseDelegate(MathOptDelegate option,int x,int y)
{
return option(x,y);
}
- 可以把方法引用直接传给委托类型的参数
Console.WriteLine(UseDelegate(obj.Add,10,20));
Console.WriteLine(UseDelegate(MathOpt.Max,100,200));
从引例中我们可以知道
- 委托实际上是一种“数据类型”,我们可以使用它来定义变量。
- 一个委托类型的变量,可以引用任何一个满足其要求的方法(包括静态或实例方法)。
- 委托变量有点像是一个方法的“容器”,将某一具体的方法“装入”后,这个委托变量就可以当成方法一样调用。
public delegate int MathOptDelegate(int value1,int value2);