C# 笔记6 委托

委托是是什么 

委托是 函数(方法)的容器
可以理解为表示函数(方法)的变量类型
用来 存储、传递函数(方法)
委托的本质是一个类,用来定义函数(方法)的类型 (返回值和参数的类型)
不同的 函数(方法)必须对应和各自”格式”一致的委托

 基本语法

关键字:delegate
语法: 访问修饰符 delegate 返回值 委托名(参数列表);


写在哪里?
可以申明在namespace和class语句块中
更多的写在namespace中


简单记忆委托语法 就是 函数申明语法前面加一个delegate关键字

定义自定义委托

访问修饰默认不写 为public 在别的命名空间中也能使用

private 其它命名空间就不能用了
一般使用public

申明了一个可以用来存储无参无返回值函数的容器
这里只是定义了规则 并没有使用 

delegate void MyFun();

委托规则的申明 是不能重名 (同一语句块中)

表示用来装载或传递 返回值为int 有一个int参数的函数的 委托 器规则

public delegate int MyFun2(int a);

委托是支持 泛型的 可以让返回值和参数 可变

public delegate T MyFun3<T,K>(T t,K k);
使用定义好的委托 

委托变量是函数的容器


委托常用在
1.作为类的成员
2.作为函数的参数

class Test
{
    public MyFun fun;
    public MyFun2 fun2;

    public void TestFun(MyFun fun,MyFun2 fun2)
    {
        //先处理一些别的逻辑 当这些逻辑处理完了 再执行传入的函数
        int i = 1;
        i += 1;
        //直接调用
        //fun();
        //fun2(i);
        //存储
        this.fun = fun;
        this.fun2 = fun2;
    }
}
internal class Program
{
    static void Fun()
    {
        Console.WriteLine("1323");
    }
    static int Fun2(int value)
    {
        return value;
    }
    static void Main(string[] args)
    {
        //专门用来装载 函数的容器
        MyFun fun = new MyFun(Fun);
        //调用
        fun.Invoke();

        //另一种写法
        MyFun fun2=Fun;
        fun2();//调用

        MyFun2 fun3=Fun2;
        fun3(1);
        MyFun2 fun4 = new MyFun2(Fun2);
        fun4.Invoke(1);

        Test test = new Test();
        test.TestFun(Fun,Fun2);
    }
 委托变量可以存储多个函数(多播委托)

如何用委托存储多个函数

//增
MyFun f = Fun;
f += Fun3;

//删
//多减不会报错 无非就是不处理而已
f -= Fun3;

//清空
//为空时调用会报错
f = null;
系统定义好的委托 

Action 无参无返回值

Func<> 可以指定返回值类型的 泛型委托

可以传n个参数的 系统提供了 1到16个参数的委托 直接用就行

Action<T,T2,T3...>  

可以传n个参数的 并且有返回值的 系统也提供了 1到16个参数的委托

Func<T,T2,...,TResult> 前几个都是参数 最后一个是返回类型

总结

简单理解 委托 就是装载、传递函数的容器而已
可以用委托变量 来存储函数或者传递函数的
系统其实已经提供了很多委托给我们用
Action:没有返回值,参数提供了 ~16个委托给我们用
Func:有返回值,参数提供了 ~16个委托给我们用 

  • 7
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值