C#——委托

C# 委托简述 使用关键字delegate声明委托除了使用delegate定义 委托以外C#提供两个定义好的泛型委托Action与Func) (当然你也可以使用delegate自定义泛型委托)这里先介绍两个C#定义的委托,相信很多人都在使用,不管你清不清楚什么是委托Action:是无返回值的泛型委托。下面action 表示无参,无返回值的委托//定义委托action();//使用方式1//使用方式2Console.WriteLine("我是传入的无参无返回值的委托方法"); 阅读详情

1、委托初体验

namespace ConsoleApp1
{
    delegate void HelloDelegate(string msg);    //定义委托
    public class MainClass
    {
        ///1--委托初体验
        ///委托是一个引用类型,其实他是一个类型,保存方法的指针,他指向一个方法,
        ///当我们调用委托的时候这个方法就立即被执行
        public static void Main()
        {
            HelloDelegate helloDelegate = new HelloDelegate(Hello);//创建委托实例,参数为函数名
            // helloDelegate.Invoke("您好委托!");
            helloDelegate("您好委托!");//调用委托
            Console.ReadKey();
        }
       
        public static void Hello(string str)
        {
            Console.WriteLine(str);
        }
    }
    }

2、对于局部数据处理,实现分层处理数据

namespace ConsoleApp1
{
    delegate bool IsCsharpVip(LearnVip learnVip);//定义委托
    class MainClass
    {
        ///1--委托初体验
        ///委托是一个引用类型,其实他是一个类型,保存方法的指针,他指向一个方法,
        ///当我们调用委托的时候这个方法就立即被执行
        public static void Main()
        {
            List<LearnVip> learnVips = new List<LearnVip>();
            learnVips.Add(new LearnVip() { Id = 1, StudentName = "Ant1号", Price = 299 });
            learnVips.Add(new LearnVip() { Id = 1, StudentName = "Ant2号", Price = 399 });
            learnVips.Add(new LearnVip() { Id = 1, StudentName = "Ant3号", Price = 599 });
            learnVips.Add(new LearnVip() { Id = 1 , StudentName = "Ant4号", Price = 599 });
            IsCsharpVip isCsharpVip = new IsCsharpVip(GetVip);
            LearnVip.CsharpVip(learnVips, isCsharpVip);
            Console.ReadKey();
        }

        public static bool GetVip(LearnVip learnVip)
        {
            if (learnVip.Price == 599)
                return true;
            else
                return false;
        }

		public static bool GetVip2(LearnVip learnVip)
        {
            if (learnVip.Price == 5999)
                return true;
            else
                return false;
        }
    }

    class LearnVip
    {
        public int Id { get; set; }
        public string StudentName { get; set; }
        public int Price { get; set; }

        public static void CsharpVip(List<LearnVip>learnVips,IsCsharpVip isCsharpVip)
        {
            foreach(LearnVip learnVip in learnVips)
            {
                if(isCsharpVip(learnVip))
                    Console.WriteLine(learnVip.StudentName + "是VIP学员!");
            }
        }
    }
}

二、泛型委托

namespace CSharpAdvancedDelegate
{
    delegate void GenericDelegate<T>(T t);
    public class GenericDelegate
    {
        public static void InvokeDelegate()
        {
            //GenericDelegate<string> genericDelegate = new GenericDelegate<string>(Method1); //委托关联
            //genericDelegate.Invoke("我是泛型委托1");

            GenericDelegate<int> genericDelegate1 = new GenericDelegate<int>(Method2);
            genericDelegate1.Invoke(2);

            //官方版本(不带返回值,参数最多16个)
            Action<string> action = new Action<string>(Method1);
            action.Invoke("我是泛型委托1");

            //官方版本(带返回值,第一个参数为传入值,第二个为返回值)
            Func<string, int> func = new Func<string, int>(Method3);
            Console.WriteLine(func("我是带返回值的func委托"));
        }

        public static void Method1(string str)
        {
            Console.WriteLine(str);
        }

        public static void Method2(int i)
        {
            Console.WriteLine("我是委托2 "+i);
        }

        public static int Method3(string str)
        {
            int i = 100;
            return i;
        }
    }
}

在这里插入图片描述
在这里插入图片描述
三、多播委托

namespace CSharpAdvancedDelegate
{
    //delegate void MulticastTest();
    /// <summary>
    /// 多播委托
    /// 【1】每一个委托都是继承自MulticastDelegate,也就是每个都是多播委托
    /// 【2】带返回值的多播委托只返回最后一个方法的值
    /// 【3】多播委托可以用加减号来操作方法的增加或减少
    /// 【4】给委托传递相同方法时 生成的委托实例也是相同的(也就是同一委托)
    /// </summary>
    public static class MulticastDelegateTest
    {
        public static void Show()
        {
            //MulticastTest multicastTest = new MulticastTest(MethodTest);
            //multicastTest();

            //Action action = new Action(MethodTest);
            //action = (Action)MulticastDelegate.Combine(action, new Action(MethodTest2));
            //action = (Action)MulticastDelegate.Combine(action, new Action(MethodTest3));
            //action = (Action)MulticastDelegate.Remove(action, new Action(MethodTest3)); //减去方法
            //action();

            //简写
            Action action = MethodTest;
            action += MethodTest2;
            action += MethodTest3;
            action -= MethodTest3; //减去方法
            foreach (Action action1 in action.GetInvocationList())  //遍历委托中所有的方法
                action1();  //单独调用
           // action(); //执行委托中所有的方法


            Func<string> func = ()=> { return "我是Lambda"; };    //()表示无输入参数
            func += () => { return "我是Function1"; };
            func += () => { return "我是Function2"; };
            func += GetTest;
            func -= GetTest;
            Console.WriteLine( func()); //只返回最后一个结果
        }
        public static void MethodTest()
        {
            Console.WriteLine("我是方法MethodTest()");
        }

        public static void MethodTest2()
        {
            Console.WriteLine("我是方法MethodTest2()");
        }

        public static void MethodTest3()
        {
            Console.WriteLine("我是方法MethodTest3()");
        }

        public static string GetTest()
        {
            return "我是方法GetTest()";
        }
    }
}
C# 委托 在 C# 中,委托(Delegate)是一种类型安全的函数指针,它允许将方法作为参数进行传递,并在不同的上下文中调用这些方法。委托提供了一种灵活的方式来实现事件处理、回调机制和异步编程等功能,极大地增强了 C# 语言的功能性和可扩展性。委托是一种引用类型,它定义了方法的签名。委托可以指向任何具有相同签名的方法。这个委托定义了一个方法签名,该方法接受一个整数参数和一个字符串参数,并且没有返回值。委托是 C# 中一个非常强大的特性,它允许将方法作为参数进行传递,并在不同的上下文中调用这些方法。 阅读详情

相关推荐

Isaac Sim 使用经验(配置要求,云服务器)

Google Colab及AutoDL都是在docker内运行,其中google colab并不支持docker指令,而依照AutoDL的相关文档,AutoDL并不直接提供docker指令。2. Google Colab/AutoDL 不支持图形化界面,图形渲染等任务,所以没有办法使用Omniverse Streaming进行直播,从而更好的对结果进行展示。对于第一点,或许存在直接手动复现镜像的可能,但是考虑到Isaac Sim/Isaac Lab由于比较新,可能不够稳定,因此还是按照官方文档进行部署。

weixin_44211433的博客 4589

C# 委托(为委托添加方法和从委托移除方法)

尽管通过上一节的内容我们知道了委托其实是不变的,不过C#提供了看上去可以为委托添加方法的语法,即使用+:运算符。例如,如下代码为委托的调用列表“添加”了两个方法。方法加在了调用列表的底部。图14-7演示了结果。当然,在使用+=运算符时,实际发生的是创建了一个新的委托,其调用列表是左边的委托加上右边方法的组合。然后将这个新的委托赋值给de1Var。

钢铁男儿 534

FR4板材实战:用ADS 2023快速设计微带线低通滤波器(附Line-Cal计算技巧)

本文详细介绍了使用ADS 2023在FR4板材上设计1-3GHz微带线低通滤波器的工程技巧。通过Line-Cal工具快速计算微带线参数,解决FR4板材的介质损耗和阻抗匹配问题,提供从集总参数转换到分布参数的实用方法,并分享版图设计与实测验证的关键要点,帮助工程师高效完成射频滤波器设计。

omega的博客 713

c#委托(精简版,好理解)

首先,我们要知道,委托它是一种类。结果如下:所以它确实是一种类!我们新定义一个除法方法我们来新建一个自定义委托注意要声明在类平级的地方,这个委托名字叫Calc,第一个double是返回值类型,后面两个是参数类型。

qq_61441003的博客 3769

MiFlash Prime免授权刷机实战:解锁小米9008 EDL救砖新方案

MiFlash Prime作为免授权刷机工具,有效解决了小米设备在9008 EDL模式下因账号验证无法救砖的难题。本文详细介绍了从驱动安装、进入EDL模式到固件刷写的完整流程,帮助用户安全快速地恢复变砖设备,是维修人员和极客的实用解决方案。

5f4d3s2a1q的博客 2891

RAW、RGB、YUV图像格式的采样与存储原理详解

本文详细解析了RAW、RGB和YUV三种核心图像格式的采样与存储原理。RAW是传感器原始数据,信息完整但需后期处理;RGB直接对应显示,直观但数据量大;YUV通过亮色分离与色度下采样,在保证观感的前提下大幅提升传输与存储效率,是视频编码与流媒体的主流格式。理解其差异是图像处理与视频开发的基础。

e4f5g6h7的博客 516

C# 委托详解

委托,委托的使用,多播委托,泛型委托

鲤籽鲲的博客 2万+

Unity程序化河流生成工具Waterways:从算法到实践的全流程解析

程序化内容生成(PCG)是游戏开发与三维建模领域的关键技术,它通过算法自动创建游戏内容,显著提升开发效率。其核心原理是将设计规则转化为可执行的代码逻辑,从而生成复杂、多样且符合自然规律的环境资产。在开放世界游戏和模拟经营类项目中,程序化生成技术能够快速构建大规模、高一致性的自然场景,如山川、森林与水体网络。Unity引擎作为广泛使用的开发平台,其地形系统与着色器管线为程序化工具的集成提供了强大基础。本文聚焦于利用Waterways这一Unity工具集,深入探讨如何通过模拟重力驱动、流量累积等自然水力原理,在

weixin_33690963的博客 684

C#中委托概念及使用方法详解

c#

u011555996的博客 1034

从0到1带大家搭建spring cloud alibaba 微服务大型应用框架(十一)spring-boot-admin 监控篇(2)springcloud 集成spring boot admin

从0到1 手把手搭建spring cloud alibaba 微服务大型应用框架(十一)spring-boot-admin 监控篇(2)springcloud 集成spring boot admin spring-boot-admin 服务端创建与集成入nacos spring-boot-admin 查看日志

峡谷电光马仔的博客 1384

在 SAP 里玩转 FTP:标准程序 RSFTP00x 全景解析与落地实践

摘要:SAP系统通过封装的标准FTP程序(RSFTP001-008)提供便捷的文件传输能力,适用于各类集成场景。关键点包括:1)依赖SAPFTP可执行程序和RFC目的地;2)使用RSFTP005进行前置检查并生成RFC配置;3)标准报表各司其职,如RSFTP002用于命令测试、RSFTP007/008提供参考实现;4)开发时组合FTP_CONNECT/COMMAND/DISCONNECT等函数模块。特别注意前台(SAPFTP)与后台(SAPFTPA)的环境差异,这是常见故障点。该方案通过标准化工具链显著降低

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 210

C#中委托

文章目录一、C#委托二、隐式类型与匿名类型三、C#扩展方法与yield关键字四、Lambda表达式 一、C#委托 举例1: 创建控制台应用程序 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace TheOne { //声明委托 public delegate string Translatio

weixin_46596213的博客 4438

ncode控件使用总结

数据格式txt转s3t #HEADER #TITLES Absolute_Time,COG_Ax,COG_Ay,COG_Az,LF_SPINDLE_AZ #UNITS ,g,g,g,g, #DATATYPES Double,Float,Float,Float,Float #DATA 2. 导入s3t数据 3. 输入数据控件 直接拖入数据源或者添加控件数据 4.

技术联盟 2006

C#之委托

C#中的委托是一个类型,它描述了一个方法的签名,即方法的参数类型和返回类型。委托可以看作是一个指向方法的引用,使得我们可以像使用函数指针一样调用这些方法。 将一个或多个方法作为参数传递给另一个方法,从而在需要时调用这些方法。 实现事件处理程序。 实现回调方法。 实现异步编程等功能。 委托和类一样,是一种用户定义类型。但类表示的是数据和方法的集合,而委托则持有一个或多个方法,以及一系列预定义操作。可以通过一下操作步骤来使用委托。

互联网底层民工的博客 1万+

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

c#————委托

定义:委托是一种引用类型,存储了对方法的引用,即委托的内部包含一个指向某个方法的指针。委托可以看作是方法的抽象,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递。声明:委托的声明类似于变量声明,需要指定委托类型和变量名。委托类型定义了方法的签名,包括返回类型和参数列表。例如,声明了一个名为MyDelegate的委托,它引用了一个返回void类型、带有一个string类型参数的方法。

2401_82978699的博客 1468

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

C# 委托和事件委托

C# 本文描述了什么是委托,什么是事件委托,如何他们,并使用C#代码描述了如何实现的。 目录: 什么是委托? 1、概念 2、代码描述委托 什么是事件委托? 1、概念 2、代码描述事件委托

C/C#、Android driver、STM32、Linux等等。 1987

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

C#中为啥要有委托,以及委托的使用。

通俗讲,所谓委托就是将函数作为变量去使用。 一个类似的动作一直在做。但是还有细微的差别,比如:中国人问好是:"你好,XXX",而美国人问好是:“Hello,XXX” 将问好这个动作封装为函数的话,就会出现如下两个函数,这两个函数应该这么写: public static void ChineseSayHi(string name){ Console.WriteLine("你好"...

qq_41877039的博客 3171

【C#进阶】C# 委托

🔘 大家好,我是哈桑。本章为大家介绍 C# 中的委托。委托是一种特殊的引用类型,是用来实现对相同参数列表和返回类型的方法的封装。委托可以将方法作为参数传递给其他方法,也是定义回调方法1的理想选择。

好学若饥,谦卑若愚。 2543

c#的委托

最近一直遇到c#的委托,刚开始看的云里雾里的,后来以c++的函数指针来类比就醍醐灌顶了。所以特此记载下来。 因为最先接触的是c++,所以先来看c++的函数指针,再来讲c#的委托。 一、c++的函数指针 参考c++primer Plus 第6版 函数有地址,函数的地址是存储其机器语言代码的内存的开始地址。 函数地址:函数名。比如说Test()是一个函数,那么Test就是这个函数的地址。要将...

Arcobaleno 5672

C# 委托和事件(委托)

回调(callback)函数是Windows编程的一个重要部分。C或C++编程背景,在许多Windows API中使用过回调。VB添加AddressOf关键字后,开发人员就可以利用以前一度受到限制的API。回调函数实际上是方法调用的指针也称为函数指针。.NET以委托的形式实现函数指针的概念。C中函数指针只不过是一个指向存储单元的指针,无法说出这个指针实际指向什么,像参数和返回类型等更不知晓。

钢铁男儿 733
上一篇: C#进阶——反射Reflection
下一篇: C#——事件
Echo_Lee0
博客等级 码龄9年 576粉丝 53原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值