Delegate的使用

Delegate的使用

一,什么是Delegate

Delegate即委托,类似于C++的函数指针,可以将函数方法作为参数进行传递,

二,Delegate的定义

  1. 无参无返回值的委托
private delegate void MyDelegate1();//定义一个无参,无返回值的委托
private MyDelegate1 _myDelegate;//对委托进行初始化

public void main()
{
    _myDelegate=fun1;
    _myDelegate(1,2);//调用fun1
}

private void fun1()
{
    Console.WriteLine("Hello World");
}
  1. 有参有返回值的委托
private delegate int MyDelegate2(int a,int b);//定义一个返回值为int,参数为两个int的委托
private MyDelegate2  _myDelegate;

public void main()
{
    _myDelegate=fun2;
    int ret =_myDelegate(1,2);
}

private int fun2(int a,int b)
{
    return a+b;
}

三,Delegate的多播(Multicasting)

Delegate可以作为储存方法的容器,可以一次储存多个方法

使用“+=”可以将方法添加到委托当中,使用“-=”可以将方法从容器中移除
private delegate void MyDelegate3();
private MyDelegate3 _myDelegate;

public void main()
{
    _myDelegate+=fun3;
    _myDelegate+=fun4;
    _myDelegate();
    _myDelegate-=fun3;
    _myDelegate-=fun4;
}

private void fun3()
{
    Console.WriteLine("fun3 is called");
}

private void fun4()
{
    Console.WriteLine("fun4 is called");
}
在调用委托前对委托中是否为空进行判断
public void main()
{
    _myDelegate+=fun3;
    _myDelegate+=fun4;
    _myDelegate();
    _myDelegate-=fun3;
    _myDelegate-=fun4;
    
    _myDelegate();//会产生no reference错误
    
    _myDelegate?.Invoke();//安全的调用方法
}

四,封装好的继承于Delegate的Class

Action:存放没有回传值的方法
private Action _myAction;
private Action<int,string> _myAction2;
Func:存放有回传值的方法
private Func<int,int,int> _myFunc;//最后一个参数为Func的存放方法的回传值

五,Lambda表达式

private Func<int,int,int> _myFunc;

public void main()
{
    _myFunc=(a,b)=>a+b;
    var result=_myFunc?.Invoke(3,5);
}

六,Delegate实现Callback

使用delegate实现定时器效果

private async void Delay(int milliseconds,Action callback)
{
    await Task.Delay(milliseconds);
    callback?.Invoke();
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值