快速理解C#高级概念(一) Delegate委托

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

做.NET开发很久,最近重新温习《C#高级编程》一书。发现很多曾经似懂非懂的问题,其实也是能够慢慢钻研慢慢理解的。

所以,打算开写《C#高级编程系列》博文。其中会借鉴《C#高级编程》一书的概念,也会参照其他高手的博文,希望大家谅解。有不对的地方,欢迎指正。

(另:本博文不会讲解定义,语法方面的基础知识。)


下面如题,我们来讲委托。

Delegate委托,在.NET中应用的非常广泛。会涉及到Lambda表达式,事件,匿名方法等(请关注后续博文)。

那么何为委托?

通俗的来讲,委托除了必须指定delegate关键字和没有方法实体之外,和指定方法没有更多区别。你可以当它是一个占位符,比如你在写代码的时候并不知道你将要处理的是什么。你只需要知道你将要引入的参数类型和输出类型是什么并定义它即可。这就是书本上所传达的方法签名必须相同的意思。


下面我们来定义一个基本的委托:

    public class Test
    {
        //定义委托
        public delegate void D_Math(int a, int b);
        public void Add(int a, int b)
        {
            Console.WriteLine("Add方法结果:{0}", a + b);
        }
        public void Cut(int a, int b)
        {
            Console.WriteLine("Cut方法结果:{0}", a - b);
        }
    }
    [TestClass]
    public class UnitTest1
    {
        [TestMethod]
        public void TestMethod1()
        {
            Test t = new Test();
            Test.D_Math D = new Test.D_Math(t.Add);//委托实例化,也可Test.D_Math D =t.Add;
            D += t.
.NET delegate 委托 、 Event 事件,接口回调,发布、订阅 另外,它还有两个 方法,分别是add_MakeGreet和remove_MakeGreet,这两个方法分别用于注册委 托类型的方法和取消注册。委托个类,它定义了方法的类型,使得可以将方法当作另个方法的参数 来进行传递,这种将方法动态地赋给参数的做法,可以避免在程序中大量使用If-Else (Switch)语句,同时使得程序具有更好的可扩展性。在类的外部,注册“+=”和注 销“-=”的访问限定符与你在声明事件时使用的访问符相同。用”这个词,是因为此变量代表个方法),可以依次调用所有绑定的方法。.... 阅读详情

相关推荐

上位机C#委托delegate)与事件(event)的快速理解

具有返回值的委托类型,返回值默认是最后个函数的返回值,就是最后添加的返回值。

tpz200296的博客 466

C# 委托函数 delegate

切记委托种类型!!!委托定义了方法的签名,包括返回类型和参数列表。这里定义了个名为MyDelegate委托,它引用了接受两个int参数并返回个int的方法。

qiuqiu 612

C#委托与事件:从基础原理到高级应用实战

C#编程中,委托与事件是实现组件间通信的核心机制。委托本质上是种类型安全的函数指针,它定义了方法的签名契约,支持多播能力,能够将多个方法链接在起顺序执行。这机制为C#提供了强大的回调功能,是LINQ、异步编程等现代范式的基础。事件则是在委托之上构建的发布-订阅模型,通过封装委托并限制外部访问,实现了对象间的松耦合通信,有效避免了委托被外部随意重置的风险。在技术价值上,这套机制是构建响应式、可维护应用程序的基石,广泛应用于UI交互、后台服务通知、领域事件驱动架构等场景。本文聚焦于C#委托与事件的核心原

weixin_30764883的博客 422

WPF跨线程访问UI对象之Dispatcher的用法(含Task)

WPF跨线程访问UI对象之Dispatcher的用法(含Task)

xieehu的博客 5412

第五章:WPF中的事件与命令

WPF中的事件与命令

鲤籽鲲的博客 7204

【.NET Core】委托Delegate)应用详解

委托Delegate)是存有对某个方法的引用的种引用类型变量。引用可在运行时被改变。委托Delegate)类似于C或C++中函数指针。委托是将方法调用者和目标方法动态关联起来,委托个类,实质上是个类,可以通过委托隐藏方法,虽然委托定义方法的参数及其返回值,但是它并不是和方法个层级的。委托Delegate)可以将方法当作另个方法的参数来进行传递,这种方法动态地赋给参数的做法,可以避免在程序中大量使用If-Else(Switch)语句,同时使得程序具有更好的可扩展性。delegate

记录总结工作过往 3078

C#反射的委托创建器

.Net 的反射是个很好很强大的东西,不过它的效率却实在是不给力。已经有很多人针对这个问题讨论过了,包括各种各样的 DynamicMethod 和各种各样的效率测试,不过总的来说解决方案就是利用 Expression Tree、Delegate.CreateDelegate 或者 Emit 构造出反射操作对应的委托,从而实现加速反射的目的。 虽然本篇文章同样是讨论利用委托来加速反射调用函数,不过...

极客神殿 2352

快速理解C#高级概念() Delegate委托

做.NET开发很久,最近重新温习《C#高级编程》书。发现很多曾经似懂非懂的问题,其实也是能够慢慢钻研慢慢理解的。 所以,打算开写《C#高级编程系列》博文。其中会借鉴《C#高级编程》书的概念,也会参照其他高手的博文,希望大家谅解。有不对的地方,欢迎指正。 (另:本博文不会讲解定义,语法方面的基础知识。) 下面如题,我们来讲委托Delegate委托,在.NET中应用的非...

dgnwy6921的博客 129

C# delegate 和action 的区别

比如,当需要特定签名的方法时,使用自定义delegate,但如果符合Action的参数要求,可以直接用Action,减少代码量。最后,总结使用场景,比如当需要特定名称的委托类型提高代码可读性时,使用自定义delegate;另外,需要注意Action是void返回类型的,而Func可以处理有返回值的情况,但用户的问题集中在Action上,所以可能需要提到这点,但不过多展开。般来说,预定义的Action委托在性能上和自定义的没有明显差别,但使用预定义的可能更高效,因为它们是框架的部分,优化过。

lcfengokok的博客 1404

C#委托delegate)与事件(event)的快速理解

具有返回值的委托类型,返回值默认是最后个函数的返回值,就是最后添加的返回值。

s_156的博客 282

快速理解C#委托中的协变与逆变

C#2.0开始,就提出了委托的协变与逆变的概念,在CSDN中不少文章都解释他们,但是比较难以理解。本文尝试以简单的表述,让大家快速理解这两个概念委托协变 我们定义 Person类和Student类,其中Student类由Person类派生。 2.我们定义了以下两个方法: public Person NewPerson(){ return new People(); }...

郝伟老师的博客——大数据、并行计算与人工智能时代 1425

快速理解C#中的委托与事件

以下内容只是个人理解,仅供参考。 什么是委托? 先看最简单的委托例子: namespace DelegateTest { public delegate void MessageDelegate(string name); class Program { private static void SaySomething(string name)

Wiiix的博客 8856

Unity C#入门:委托Delegate的基础定义与调用

Unity C#委托(Delegate)是游戏开发中的核心概念,它允许将方法作为参数传递,实现回调机制和事件处理。文章详细讲解了委托的基础定义与调用方法,包括:1) 委托声明语法;2) 委托实例化;3) 多播委托的使用;4) 匿名方法与Lambda表达式。通过实际代码示例展示了委托在Unity中的典型应用场景,如事件系统、UI交互和游戏逻辑处理。掌握委托技术能显著提升开发效率,是Unity工程师进阶的必备技能。文章还提供了最佳实践建议和常见问题解决方案。

编程世界如山海,探索不止。 1万+

C#委托及Tolua下C#委托导出到lua

C#委托及Tolua下C#委托导出到luaC#委托的介绍(delegate、Action、Func、predicate)Tolua下C#委托导出到lua的相关代码片段CustomSettings.csLuaBinder.csDelegateFactory.cslua中使用导出的委托的示例使用System.Action< int >使用DG.Tweening.TweenCallback ...

winzjqwin的专栏 1162

php 事件委托,Unity 项目中委托Delegate用法案例

Unity中Delegate的用法场景本文提供全流程,中文翻译。Chinar坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 —— 高分辨率用户请根据需求调整网页缩放比例)Chinar—— 心分享、心创新!助力快速理解C# Delegate的基本用法为新手节省宝贵的时间,避免采坑!Chinar教程效果:全文高清图片,点击即可放大观看(很多人竟然不知道)1Delegate —— 委托Unity ...

weixin_39521009的博客 120

Unity 项目中委托Delegate用法案例

Unity 项目中委托Delegate用法案例 Unity中Delegate的用法场景 Chinar - 本文提供全流程,中文翻译。助力快速理解 C# Delegate的基本用法 Unity 中,委托多用于当某个值,或者物体状态发生改变的时候 其他些操作需要同时进行监听 旦状态发生,改变,所有注册在委托中的函数,都会被调用 这里以个简单的 商店模式 来模拟流程 用委托实现,群体的函数、方法注册到对象中 注意: 我们需要 1 个主脚本用来管理 :服务员 3 个顾客类:顾客 A/B/C

ChinarCSDN的博客 9522
上一篇: MVC验证
下一篇: 快速理解C#高级概念(二) 事件与委托的区别
chamychen
博客等级 码龄17年 22粉丝 16原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值