[C#复习向整合]委托

一.本质

委托的本质是一个雷,用来定义函数的类型,是函数的容器.

不同函数必须对应和各自"格式"一致的委托.

二.基础语法

关键字:delegate

访问修饰符 delegate 返回值 委托名(参数列表);

简单记忆则是:没用函数体的函数,在返回值前加一个delegate.

通常将委托写在namespace语句块中.在类中作为成员变量使用.

委托还可以作为函数的参数.此时可以在委托执行前,在函数内做一些操作,再执行委托里的函数.

三.定义自定义委托

修饰符默认public

public delegate void MyFuc();
//这里只是定义了一个委托类,还并没有使用

public delegate int MyFuc1(int i);//委托不能像函数一样重载
//用来装载返回值为int,有一个int参数的函数的委托容器规则

四.使用定义好的委托

public void Fun()
{
    
}
//装载函数的容器
//写法一
MyFuc f = new MyFuc(Fun);//只传函数名,注意改函数要跟定义好的委托一样(这里是无参无返回值)
//委托调用
f.Invoke();

//写法二
MyFuc f2 = Fun;
f2();//与invoke是一样的


//使用有参有返回值的委托
public int Fun2(int i)
{

}
MyFuc2 f3 = Fun2;
f3(2);

把委托作为函数参数使用:

public void Function(MyFuc f1,MyFuc2 f2)
{
    int i =2*5-3+8;
    f1();
    f2(i);
}

//使用
f1 = (某个函数);
f2 = (某个函数);
Function(f1,f2);

五.多播委托

委托变量可以存储多个函数

public void Fun1()
{

}
public void Fun2()
{

}
//初始化赋值时不能用+=,但若初始化时不赋值,或为null,则之后可以+=
MyFuc f1 = null;
f1 +=Fun1;
f1 +=Fun2;

//删除
f1 -=Fun2;
f1 -=Fun2;//多减不会报错
f1 = null;//置空,此后不能再调用f1了!
if(f1!=null)
{
    f1();
}

六.系统定义好的委托

需要命名空间 System

//如果我们需要一个无参无返回的委托,
//则每次写脚本都要写delegate void Fun();这样的一句话,太麻烦
//系统为我们提供了一些委托

delegate void FunVoid();
//等价于Action
//使用时
FunVoid func;
//等价于
Action func;

//泛型委托
Func<string> func2;//返回值为string类型的函数的容器
//自定义泛型weituo
delegate T MyFuc3<T>(T t);

//有参数的泛型委托,(没有返回值)
Action<int> func3;//参数为int的委托
Action<int,int,int> func4;//三个int参数的委托,最多16个

//有参有返回值
Func<int,string> func5;//参数int,返回值string

资料来源<唐老狮C#教程>

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值