C#语言进阶(一)—委托 第一篇

总目录
C# 语法总目录
系列链接
C#语言进阶(一) 委托 第一篇
C#语言进阶(一) 委托 第二篇

委托 第一篇

委托 第一篇

  委托类似于CPP中的函数指针。它定义了一个方法类型,这个方法类型有返回类型和形参,不需要方法体,但是在声明这个方法类型时要添加delegate关键字

1. 基本用法

切换委托的方法指向,从而执行不同方法。

csharp 复制代码
namespace TopSet
{
    internal class Program
    {
        //声明委托类型
        delegate int MethodTypeOfDelegate(int a, int b);
        static void Main(string[] args)
        {
            //给委托类型赋值
            MethodTypeOfDelegate mt = Add;
            Console.WriteLine(mt(1,2));
            mt = Dec;
            Console.WriteLine(mt(2,1));
            Console.ReadLine();
        }

        static int Add(int a,int b)
        {
            return a + b;
        }

        static int Dec(int a,int b)
        {
            return a - b;
        }
    }
}

--输出
3
1

2.委托作为方法参数

委托类型作为某个方法的参数传入

csharp 复制代码
namespace TopSet01
{
    internal class Program
    {
        //声明委托类型
        delegate int MethodTypeOfDelegate(int a);
        static void Main(string[] args)
        {
            int a = 5;
            //传入
            MultiValue(ref a, Add);
            Console.WriteLine(a);
            Console.ReadLine();
        }
		//委托类型作为参数
        static void MultiValue(ref int a,MethodTypeOfDelegate mt)
        {
            a = mt(a);
        }

        static int Add(int a)
        {
            return a * a;
        }
    }
}

3.多播委托

  多播委托就是把需要按照顺序执行的,相同类型的委托方法加到一起,执行的时候会按照顺序执行所有的委托方法。可以用于控制台和日志文件的输出。

下方案例仅供演示用法,具体问题需要灵活变通后使用。

csharp 复制代码
namespace TopSet02
{
    public delegate void MethodTypeOfDelegate(int a);
    public class Util
    {
        public static void PrintSquence(int a,MethodTypeOfDelegate mt)
        {
            mt(a);
        }
    }

    internal class Program
    {
        static void Main(string[] args)
        {
            MethodTypeOfDelegate? mt = null;
			
            //加起来,按照加入的顺序执行
            mt += PrintSelf;
            mt += PrintMul;
            int a = 5;
            Util.PrintSquence(a, mt);

            Console.ReadLine();
        }

        static void PrintSelf(int a)
        {
            Console.WriteLine(a);
        }

        static void PrintMul(int a)
        {
            Console.WriteLine(a*a);
        }
    }
}

--输出
5
25

总目录
C# 语法总目录
系列链接
C#语言进阶(一) 委托 第一篇
C#语言进阶(一) 委托 第二篇

相关推荐
郝学胜-神的一滴13 小时前
Qt 高级编程 040:按钮悬浮弹出滑块弹窗的完整攻略
开发语言·c++·qt·软件工程·用户界面
xrandzj14 小时前
Python面向对象编程入门:类、实例、初始化与封装实践
开发语言·python
DLYSB_15 小时前
API 网关流量洪峰与突发 CC 攻击:我用 Go 写了个“现场物理防御哨兵”,把故障响应压缩到秒级
开发语言·后端·golang·报警灯
雨田言炎17 小时前
四、关于Qt项目需要知道的
开发语言·笔记·qt
猿长大人17 小时前
C# | JSON 序列化中的多态接口处理:基于 Attribute 实现精准 $type 控制
c#·json
程序喵大人17 小时前
【C++进阶】STL算法与函数对象 - 02 sort为什么需要随机访问迭代器
开发语言·c++·算法
SomeB1oody18 小时前
【RustyML入门】2.6. 线性判别分析
开发语言·后端·机器学习·rust·教程
用户昵称10018 小时前
C/C++编程-工程实践-本地存储log的工程意义
c语言·开发语言
吹什么轩20 小时前
c++复习:map和set的使用
开发语言·c++
必须得开心呀20 小时前
qt生成dump文件并定位异常
开发语言·qt