委托是一类行为的抽象。是方法的引用,是一种数据类型
委托可以实现对方法的【间接】调用! 灵活=维护性好!
委托的定义:委托是一种数据类型;委托代表的是方法,当调用委托时就是调用了这个方法。
【委托能存储方法的地址{ 引用}】【间接调用】
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace DemoDelegate1
{
//调用端
class DelagateDemo1
{
static void Main(string[] args)
{
//步骤2:实例化委托(绑定f1方法)
Handler handlerObj = new Handler(F1);
//绑定A类的方法new Handler(A.F);
//步骤3:调用委托
handlerObj();
}
static public void F1()
{
}
}
//定义端
//步骤1:声明委托,定义委托
delegate void Handler();
//delegate int CalHandler(int a, int b);
class A
{
public static void F()
{
Console.WriteLine("委托的使用步骤");
}
}
}
使用案例↓
namespace 事件的使用案例_猫和老鼠
{
class Program
{
static void Main(string[] args)
{
//猫 mao = new 猫();
//老鼠 laoshu = new 老鼠();
//mao.叫();
//laoshu.逃跑();
猫 mao = new 猫();
老鼠 laoshu = new 老鼠();
//步骤2:注册事件
mao.叫+=new Handler(laoshu.逃跑);//添加老鼠跑行为
//mao.叫-= laoshu.逃跑;
//步骤4:
mao.Notify();
Console.Read();
}
}
//1.1 定义一个委托
delegate void Handler();//定义一个委托
class 猫
{
//public void 叫()
//{
// Console.WriteLine("miaomiao");
//}
//步骤1.2:定义事件
//public event Handler 叫;
public Handler 叫;
//步骤3:触发事件 固有的写法
public void Notify()
{
if(叫!=null)//判断事件有没有执行
{
Console.WriteLine("miaomiao");
叫();//调用事件的方法
}
}
}
class 老鼠
{
public void 逃跑()//老鼠逃跑行为
{
Console.WriteLine("jiji。。。。");
}
}
}
多播委托:一个委托对象关联多个方法 只返回最后方法的结果↓
所以:委托有返回值不适合多播执行!