委托

委托 delegate

是一个类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递。它可以定义在类体外。

// 实例化
Action<int> fun1 = new Action<int>(
    delegate(int i){
        Console.WriteLine(i);
    });

// 匿名函数
function Method1(Action<int> callback)
{
    callback();
}

Method1(delegate(i){
    Console.WriteLine(i);
});

// Lambda表达式
Method1(i=>Console.WriteLine(i));
public delegate string GetNameDelegate;
public class Test
{
    public Test()
    {
        PrintName(GetNameID, 11);

    }

    private void PrintName(GetNameDelegate fun, int id)
    {
        Console.WriteLine( fun(id) );
    }

    private string GetNameID(int id)
    {
        return "HeHe " + id;
    }       
}


委托对象的类型为Delegate,可以将自定义的委托存入,取出转换类型再调用

List<Delegate> lstDe = new List<Delegate>();
...
MyDelegate myd = lstDe[0] as MyDelegate;
myd();

事件 event

事件是基于委托的封装,主要解决两个问题:

  • 委托第一次添加事件时,里要初始化
  • 无法修改委托的权限使其不被外部修改
  • public class MouseListener
    {
        public delegate void CallbackDelegate(GameObject go);
        public event CallbackDelegate eventMouseClick;
    }
    
    public void Test()
    {
        MouseListener liser = new MouseListener();
    
        // 第一次使用不需要赋值操作
        liser.event += OnMouseClick;    
    
        // 不可以改变event的值
        // liser.event = OnMouseClick   // Error
    }
    
    private void OnMouseClick(GameObject go)
    {   
    }
    

    Action

    无返回类型的泛型委托

    public Action actionDelegate1;
    public Action<string, int> actionDelegate2;

    Func

    有返回类型的泛型委托,参数最后一项为返回值类型

    // 参数为string型,返回值为int型
    public Func<string, int> funcDelegate;

    Predicate

    返回类型为bool的委托

    // 返回bool,参数为int
    public Predicate<int> predicateDelegate;

    EventHandler

    事件处理函数的委托

    // FCL中的声明
    public delegate void EventHandler(object sender, EventArgs e);
    public delegate void EventHandler<TEventArgs>(object sender, TEventArgs e) where TEventArgs : EventArgs;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值