委托
委托也叫代理,就是把事情交付给别人去办。委托是具有相同弄个签名和返回值类型的有序方法列表。
!委托定义了方法的类型,使得可以把方法当做另一个方法的参数来进行传递!
委托是一种引用类型,方法的列表称为调用列表,当委托被调用时,它调用列表中的每个方法。
委托是方法的抽象,它存储的就是一系列具有相同签名和返回值类型的方法的地址/引用。
定义
语法格式:访问修饰符 delegate 返回类型 标识符(参数列表);
实例与赋值
声明实例的语法格式:委托类型 标识符;
对委托赋值语法格式:标识符=方法;
多播委托:
标识符+=方法(向委托上绑定方法)
标识符-=方法(解除委托上的方法)
注意事项
1.委托和要代理的方法必须有相同的返回类型和参数
2.委托调用过程中的协变与抗变! 不会!!!!
3.命名规范:委托标识符以EventHandle结尾。(无所谓)
委托实现
一、声明委托
二、声明对象
三、绑定方法
四、调用委托
方法一:
方法一:同类中用委托
class Program
{
public delegate void Del(string a); //1. 声明委托
static void Main(string[] args)
{
Del del; //2.声明实例
del = FF; //3.绑定方法
del("qwe"); //4.调用委托
Console.ReadKey();
}
static public void FF(string a) //2.参数要和委托相同(在声明实例之后就
{ //创建新方法,新方法参数必须与委托参数相同
Console.WriteLine("方法一");
}
}
方法二:
方法二: 上面强调的重点 使用委托可以将方法作为参数进行传递
class Program
{
public delegate void Del(string a); //1. 声明委托
static void Main(string[] args)
{
F(FF); //4.传参时绑定方法(使方法作为
//参数传递)
Console.ReadKey();
}
static void F(Del del) //2.声明实例(作为参数)
{
del("qwe"); //3.调用委托!实参要写
Console.WriteLine("后输出");
}
static void FF(string c) //2.方法参数要和委托一样 然后用
{ // 这个方法做上一个方法的参数
Console.WriteLine("先输出");
}
}
方法三:
方法三:在不同类中使用委托,委托绑定方法时可以加绑 也可以解绑 操作更灵活
class Program
{
static void Main(string[] args)
{
C1 c1 = new C1();C2 c2 = new C2();
c2.del += c1.F1; //3.绑定方法
c2.del += c1.F2;
c2.del += c1.F3;
c2.del("呵呵4"); //4.调用委托
Console.ReadKey();
}
}
class C1
{
public void F1(string a) // 2.5 方法中的参数一定要对应委
// 托中的参数
{
Console.WriteLine("哈哈1");
}
public void F2(string b)
{
Console.WriteLine("哈哈2");
}
public void F3(string c)
{
Console.WriteLine("哈哈3");
}
}
class C2
{
public delegate void Del(string a); //1. 声明委托
public Del del; //2.声明实例
}