目录
委托
1.委托
委托的意义:C#中委托的存在为很多特性打下了基础
委托的定义:委托是类类型。只有类才会有对象
委托的作用:
- 可以把委托理解为对函数的包装,它使得C#中的函数可以作为参数来传递。作用上来看,相当于C++中的函数指针
- 简单的说,委托是一个持有一个方法或多个方法的对象。而委托与对象的区别在于:你可以执行委托。当你执行委托时,委托对象则会执行它持有的方法。
- 用生活中的事件举例,委托对象就像是一个律师、方法就是律师当事人的证词、整个过程就是当事人委托律师为自己辩护。
定义委托类型的语法:(与方法类似)
访问修饰符 delegate 返回类型 委托名(类型1 变量1,类型2 变量2);
声明委托变量并实例化:
委托名 变量 = new 委托名(对象.方法);
使用委托的要求:
- 对于委托包装的方法
- 方法的返回类型和参数必须和委托一致
委托的使用:
委托的使用分为四步:1.定义委托类型、2.声明委托变量并实例化、3.作为参数传递给方法、4.调用委托。
class Program
{
//1.定义委托类型、
public delegate void MyDelegate(int x,int y);
static void Main(string[] args)
{
//2.声明委托变量并实例化、
//注意1:传递的方法可以为实例、也可以为静态。
//注意2:委托的实例化是用一个不带括号的方法名作参数
MyDelegate a = new MyDelegate(new Program().Add);
//3.作为参数传递给方法、
Method(a);
}
void Add(int x,int y)
{
Console.WriteLine("两数总和为{0}",x+y);
}
//方法的参数是委托类型
void Method(MyDelegate a)
{
//4.隐式调用委托。
a(2,3);
//显式调用委托
a.Invoke(2,3);
}
}
2.委托链(组合委托)
委托链的定义:委托链是委托类型。我们把链接了多个方法的委托称为委托链或多路广播委托。
委托链的使用:
class Program
{
//1.定义委托类型、
public delegate void MyDelegate();
static void Main(string[] args)
{
//2.声明并实例化委托
MyDelegate a = new MyDelegate(new Program().method1);
MyDelegate b = new MyDelegate(Program.method2);
//3.声明委托变量,并初始化为null
MyDelegate c = null;
//4.使用+号来链接委托,使委托变成委托链
MyDelegate c += a;
MyDelegate c += b;
//5.使用-号来移除委托
MyDelegate c -= a;
//调用委托链
c();
}
void method1()
{
Console.WriteLine("这是实例方法");
}
static void method2()
{
Console.WriteLine("这是静态方法");
}
}
2.1 调用带返回值的委托
调用带返回值的委托时:
- 返回调用列表最后一个方法的返回值,其他的返回值会被忽略。
2.2调用带引用参数的委托
调用带引用参数的委托时:
- 在调用列表中的下一个方法时,参数的新值(不是初始值)会传给下一个方法。