前言
虽然学习C#有段时间了,可一直没怎么接触委托,在学习多线程的时候,看到了很多委托的例子,有点不太理解,故查阅资料学习,特此整理成文。
1.委托是什么?
个人认为,委托可以从下面两个方面来理解:
(1) 从类型来讲,委托是和结构体、类一样是一种用户自定义类型。
(2) 从内容上来讲,委托(类)提供了方法(对象)的抽象。
既然委托是一种类型,那么它存储的是什么数据?
我们知道,委托是方法的抽象,它存储的就是一系列
具有相同签名和返回回类型的方法的地址。
调用委托的时候,委托包含的所有
方法将被执行。
2.下面以一个列子来讲解如何使用委托和委托的特性
2.1定义委托
//定义了一个委托
delegate void MyDel(int x);
2.2定义相同签名和返回回类型的方法
public class Temp
{
public static void MyDel789(int x)
{
Console.WriteLine("Temp:"+x + 789);
}
}
public class test
{
public void MyDel456(int x)
{
Console.WriteLine("test:" + x + 456);
}
}
public class TestDelegate
{
public static void MyDel123(int x){
Console.WriteLine("TestDelegate:" + x + 123);
}
}
2.3 定义委托
//声明变量, 初始化(两种方法)
MyDel del123 = new MyDel(TestDelegate.MyDel123);
MyDel del456 = new test().MyDel456;
2.4调用委托
//委托调用
del123(0);
del456(0);
2.5组合委托
//委托组合
MyDel delSum = del123 + del456;
Console.WriteLine("SUM:");
delSum(0);
MyDel del789 = new MyDel(Temp.MyDel789);
2.6 "加减"委托
个人认为:可以将委托看做是
能够装载指定格式的方法的集合
//委托加减运算
delSum += del789;
delSum -= del123;
Console.WriteLine("SUM:");
delSum(0);
2.7 匿名委托及其变形
// 匿名方法
MyDel del = delegate(int x)
{
Console.WriteLine(x);
};//匿名方法
//Lambda表达式
MyDel del2 = (int x) =>
{
Console.WriteLine(x * x);
};//Lambda表达式
MyDel del3 = x =>
{
Console.WriteLine(x * 3);
};//简写的Lambda表达式
del(1);
del2(2);
del3(3);