C#学习笔记——基础概念——什么是委托(Delegate)

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

🧱委托 (Delegate)vs 函数指针:

将委托理解为函数指针,但有区别

特性C++ 函数指针C# 委托
类型安全❌ 不完全✅ 完全类型安全
支持多个方法(多播,将多个方法绑定在一个委托上,在被调用时会逐个实现)❌ 需要手动实现✅ 支持(+/-)操作
可以引用实例方法❌ 需要绑定对象✅ 支持
异步调用✅ 支持(BeginInvoke)

🧱C# 中常见的内置委托类型

C# 提供了一些常用委托类型,省去了自己定义 delegate 的麻烦:

类型等价于 C++ 的说明
Actionstd::function<void()>没有返回值,无参数
Action<T>std::function<void(T)>无返回值,带一个参数
Func<T, TResult>std::function<TResult(T)>有返回值
Predicate<T>std::function<bool(T)>返回 bool 的判断函数

🧱实际应用:事件(Event)

这是 C# 委托最常用的场景之一。

C++ 中的事件机制(槽函数绑定)

connect(button, &QPushButton::clicked, this, &MyClass::handleClick);

C# 中的事件机制(基于委托)

button.Click += HandleClick;

private void HandleClick(object sender, EventArgs e)
{
    MessageBox.Show("Button clicked!");
}

C# 的委托 = C++ 的函数指针 + std::function + lambda 的结合体,并且更安全、更强大、更易用。

c# 委托 关键字:Delegate 学习笔记 生活中是不是经常需要拜托别人帮忙做一件事情? 比如:工作中,客户反馈系统有一个bug,但是你手头上还有很多工作没做完,就需要拜托有时间的同事帮忙解决一下 这就是委托了 定义委托(就是我现在有一个改bug的工作要处理)——声明一个和委托类型一模一样的方法(拜托同事帮忙改bug)—— 执行委托(同事接受我的委托,开始处理bug)注意:委托类型和方法类型必须是一样的,因为要处理同样类型的事情,否... 阅读详情

相关推荐

C# 委托 delegate

访问修饰默认不写 为public 在别的命名空间中也能使用private 其它命名空间就不能用了一般使用public申明了一个可以用来存储无参无返回值函数的容器这里只是定义了规则 并没有使用委托规则的申明 是不能重名(同一语句块中)表示用来装载或传递 返回值为int 有一个int参数的函数的 委托 容器规则委托是支持 泛型的 可以让返回值和参数 可变 更方便我们的使用使用系统自带委托 需要引用using System;无参无返回值action()

m0_53393728的博客 2453

C#基础--委托(Delegate)

简单介绍C# 委托知识

five_s的博客 1万+

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

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

chamychen的专栏 2万+

C#学习--委托 Delegate

最近在学习C#,今天这篇博客就对C#的重要特性--委托delegate)做一下相关介绍。 在介绍委托之前,我们先看以下代码: private static double Calculate(double param1, double param2) { return Calculate_Add(param1, param2); } static double Calculate

RapdoZoroの博客 1893

C# 委托Delegate

C# 中,委托Delegate) 是一种类型安全的函数指针,它允许将方法作为参数传递给其他方法。C# 中的委托Delegate)类似于 C 或 C++ 中函数的指针。是存有对某个方法的引用的一种引用类型变量,引用可在运行时被改变。委托C# 中非常常见,用于事件处理、回调函数、LINQ 等操作。所有的委托Delegate)都派生自类。

xiaoaque的博客 1325

C# 委托Delegate)一

一.Delegate的定义说明: 二.声明委托Delegate): 三.实例化委托Delegate):

weixin_53520014的博客 1217

C#委托(delegate)和多播委托的理解

委托 委托是寻址方法的.NET版本。 在C#高级编程(第七版)中这是对委托的第一句描述。 什么是寻址方法? 简单理解为我们通过委托传递一个方法给另一个方法。 什么时候需要传递方法? 在微软的官方文档和C#高级编程(第七版)这本书都提到一个例子-----在对象的排序算法中,需要对对象进行比较,而不同对象比较的方法不同,所以比较两个对象的方法的引用可以作为参数传递到排序算法中,这个时候就需要传递方法。...

define_LIN的博客 3120

C#委托-Delegate

C#委托DelegateC# 中的委托Delegate)类似于 C 或 C++ 中函数的指针。委托Delegate)是存有对某个方法的引用的一种引用类型变量。引用可在运行时被改变。 委托Delegate)特别用于实现事件和回调方法。所有的委托Delegate)都派生自System.Delegate类。 声明委托Delegate委托声明决定了可由...

aoduan2234的博客 1053

Delegate、Action 与 Func 委托的全面解析

Action 和 Func 委托C# 中极其强大的工具​​简化代码​​:减少自定义委托类型的需要,使代码更简洁​​提高可读性​​:通过明确的命名表达意图​​增强灵活性​​:支持将方法作为参数传递,实现策略模式等​​与Lambda完美结合​​:支持使用简洁的Lambda表达式定义行为​​是LINQ的基础​​:Func委托是LINQ查询的核心组件。

lzt1027的博客 2116

C#委托Delegate)精讲

前言:C#中的委托类似于C或C++中函数的指针。委托是存有对某个方法的引用的一种引用类型变量,引用可在运行时被改变。 文章目录一、委托概念二、声明委托 一、委托概念 委托类型表示对具有特定参数列表和返回类型的方法的引用。 通过委托,可以将方法视为可分配给变量并可作为参数传递的实体。 委托是引用类型,可以把它看作是用来存方法的一种类型。比如说类型string用来定义存取字符串的变量,那么委托类型delegate就可以用来定义存方法的变量。委托和类一样,是一种用户自定义类型。但类表示的是数据和方法的集合,而

路虽远,行则必至! 2980

C# 委托(Delegate)全面解析:从基础到高级应用

本文深入探讨了 C# 和 .NET 中的委托机制,涵盖了其基础概念、类型系统、高级特性、实现原理及实战应用。委托作为类型安全的函数指针,支持事件处理、回调方法和函数式编程。文章首先介绍了委托的本质和基本语法,随后对比了内置委托类型与自定义委托的优缺点。接着,详细讲解了多播委托、协变与逆变等高级特性,并剖析了委托的内存模型和调用流程。最后,通过回调模式展示了委托在实际开发中的应用。本文为开发者提供了全面理解和使用委托的指南。

记录学习的过程 831

C#入门 019 委托 delegate

委托是一种类(class),类是数据类型所以委托也是一种数据类型它的声名方式与一般的类不同,主要是为了照顾可读性和C/C++传统注意声明委托的位置避免写错地方结果声明成嵌套类型声明在namespace里面 与其他类同级委托与所封装的方法必需“类型兼容“返回值的数据类型一致参数列表在个数和数据类型上面一致(参数名不需要一致 )

gjw3037109961的博客 1163

C# 技术使用笔记委托Delegate)的应用

首先,需要定义一个委托类型,该委托将作为事件的基础。然后在类中声明一个事件,使用该委托类型。// 定义事件// 触发事件的方法// 检查事件是否为空,避免空引用异常Click?在这个例子中,是一个委托类型,它定义了事件处理方法的签名。Button类中声明了一个名为Click的事件,该事件基于委托。OnClick方法用于触发事件,当按钮被点击时调用。委托Delegate)是 C# 中一种非常强大且灵活的特性,它为方法的动态调用、事件处理、回调机制等提供了底层支持。

caifox的博客 2302

C#委托delegate、Func、Action、precidate)学习笔记

C#中Func和Action的简单使用delegate的简单使用Func声明Func结合Lambda表达式使用结合匿名方法使用Action声明Action结合Lambda表达式使用结合匿名函数使用 通常自定义使用委托是用delegate。Func和Action类是特殊的类型,它们允许程序员在不必指定自定义委托类型的情况下,去使用委托。而通过F12查看函数声明可以发现,Func和Action类本质上也是通过delegate关键字实现的。 Func和Action在使用时非常相似,下面将简单介绍Func和Acti

SQWH_SSGS的博客 1388

C# 委托详解(Delegate

C# 编程当中,委托Delegate)是一种特殊的类型,它允许将方法作为参数传递给其他方法,或者将方法作为返回值返回,这种特性使得委托成为实现回调函数、事件处理等,所有的委托都派生自System.Delegate类。

m0_74995879的博客 2324

C#委托delegate

delegate 委托:将方法作为变量或参数进行传递,并以方法的形式进行执行; //带参数并且无返回值的委托 public delegate void SayHelloFunc(string name); namespace CPlusLesson { class Test01 { static void Main(string[] args) { //委托的声明:(注意:有参无返回值的委托对应有参无返回值的方法;——要相对应)

IT_JS_tao的博客 3419

C#中的委托delegate

委托是一种定义方法签名的类型,可以与具有兼容签名的任何方法关联。你可以通过委托调用方法。委托用于将方法参数传递给其它方法。事件处理程序就是通过委托调用的方法(这是MSDN中对委托的解释)。个人感觉C#委托类似于C++中的函数指针,但委托又是一种特殊的类,只有方法的类。 在C#中使用委托时,需要经过这两个步骤,首先定义要使用的委托,对于委托定义它就是告诉编译器这种类型的委托表示哪种类型的方法

给永远比拿愉快 2008

C# 委托Delegate原理总结

类型安全:比如c#委托就是类型安全的,为什么呢?C/C++非成员函数的地址本质就是一个内存地址,这个地址不携带任何额外信息,比如函数收到的参数个数、参数类型、函数返回类型、函数的调用协定。任何调用方式都可以很轻易的调用函数,从而在编译层面不报错,而运行中出错。这就是类型不安全的。 C#编译器和CLR对委托所做的额外隐藏工作 委托本质是定义了一个类: ...

yangqi21的专栏 1453
上一篇: C++:常见错误LNK2019的原因之一,父类未实现构造函数
下一篇: C#学习笔记——基础概念——什么是Lambda 表达式
Vanderbiol
博客等级 码龄8年 186粉丝 70原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值