C#委托和事件简单复习

这篇具有很好参考价值的文章主要介绍了C#委托和事件简单复习。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

C#委托

太久没用了,简单的复习一下
快速过一遍语法使用

使用委托的步骤

1.定义一个委托类型
只需要在声明的前面加上delegate关键字,其他的就跟声明一个方法(函数)类似

public delegate void SayHello(string name);

2.使用刚刚声明的委托
需要定义一个返回值跟参数与我们刚刚定义的委托一致

public static void MyFunc(string name)
{ 
	Console.WriteLine($"Hello {name}");
}

3.然后声明一个SayHello类型(委托)的变量
把前面定义的方法赋值给变量
然后就可以使用委托像正常调用MyFunc一样使用该方法

SayHello say = MyFunc;
//调用委托
say("Tom");
//进入MyFunc输出 "Hello Tom"

也可以使用Lambda表达式给委托赋值

SayHello say = (string name)=> {
	Console.WriteLine($"Hello {name}");
};

SayHello say = name=> {
 Console.WriteLine($"Hello {name}");
};

效果都是一样的

委托也可以定义为泛型,除了delegate其他都与声明方法(函数)无异

public delegate bool Compare<T1,T2>(T1 t1,T2 t2);

对委托最常使用的方法是 Invoke() 和 BeginInvoke() / EndInvoke()
Invoke() 会调用赋值给委托的所有方法
直接调用也是全部方法都调用say()

要注意的是除了第一次赋值其他都要用+=的方式赋值,否则后面的会覆盖掉前面的

最终结果输出   "不想打招呼"
//第一次赋值
SayHello say = name => {
	Console.WriteLine($"你好 {name}");
};
//还是用 = 号赋值
say = MyFunc;
say = _ => { 
 Console.WriteLine("不想打招呼");
};
say("Tom");
//say.Invoke("Tom");
最终输出 :
{
    你好 Tom
    Hello Tom
    不想打招
}
//第一次赋值
SayHello say = name => {
	Console.WriteLine($"你好 {name}");
};
say += MyFunc;
say += _ => { 
 Console.WriteLine("不想打招呼");
};
say("Tom");
//say.Invoke("Tom");

还有就是可以使用 -= 移除方法

SayHello say = name => {
	Console.WriteLine($"你好 {name}");
};
say += MyFunc;
say += _ => { 
 Console.WriteLine("不想打招呼");
};

//移除MyFunc,这样最后就不会输出 Hello Tom 了
say-=MyFunc;

say("Tom");

官方提供的定义好的委托

1.Action:没有返回值,返回值为void
2.Func:有返回值,泛型的最后一个参数为返回值类型,
比如:Func<string,int> 或 Func int 就是方法的返回值
3.Predicate 返回值为 bool

事件 Event

事件是跟委托结合使用的,事件基于委托,而且是多播委托
定义一个事件的语法就是 event +委托(定义好的委托)+变量名(随便取,不过最好规范点)

	public event SayHello OnSayHello;

和委托不一样事件只能通过+= 和 -= 添加和移除方法
所有添加(订阅了OnSayHello)的方法在事件调用(触发)的时候都会收到通知,
也就是被调用

OnSayHello += Program_OnSayHello;
OnSayHello += s => {
	Console.WriteLine($"张三听到有人在叫{s}");
};
OnSayHello += _ => { Console.WriteLine("有人在招呼?"); };
//OnSayHello("Tom");
OnSayHello.Invoke("Tom");

private static void Program_OnSayHello(string name)
	{
		Console.WriteLine($"有人在跟{name}招呼");
	}
	
//最终输出
有人在跟Tom招呼
张三听到有人在叫Tom
有人在招呼?	

区别委托和事件

我们发现委托跟事件 好像很像,但还是要根据不同的情况选择。
更多

C#委托和事件之间的区别如下:

  1. 委托是一个包含一个或多个方法引用的对象,它可以在程序中传递和调用方法。而事件是一个特殊类型的委托,它只能在定义它的类中触发,并且它通常用于实现观察者模式。

  2. 委托可以在程序中的任何地方调用,而事件只能在定义事件的类中触发。

  3. 委托可以被任何方法调用,而事件只能由一个或多个特定的方法注册和调用。

  4. 委托可以使用“+”和“-”运算符来添加和移除方法,而事件只能使用“+=”和“-=”运算符来添加和移除事件处理程序。

  5. 委托可以直接调用方法,而事件必须在事件处理程序中被触发。文章来源地址https://www.toymoban.com/news/detail-621284.html

到了这里,关于C#委托和事件简单复习的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C#学习,委托,事件,泛型,匿名方法

    目录 委托 声明委托 实例化委托 委托的多播 委托的用途 事件 通过事件使用委托 声明事件 泛型 泛型的特性 泛型方法 泛型的委托 匿名方法 编写匿名方法的语法 类似于指针,委托是存有对某个方法的引用的一种引用类型变量,引用可以在运行时被改变。特别用于实现事件和

    2024年02月12日
    浏览(33)
  • C# 中的委托和事件机制

    在C#中,委托和事件是非常重要的概念,用于实现程序中的回调和事件处理。在这里,我们将介绍C#中委托和事件机制的基础知识和用法。 委托是一种类似于C/C++函数指针的概念,它允许将方法作为参数传递到其他方法中,以实现回调函数的功能。委托是一种类型,它可以表示

    2023年04月21日
    浏览(28)
  • C# 事件和委托的区别并说明

    事件是基于委托的,为委托提供了一个发布/订阅机制。可以说事件是一种特殊的委托,他的调用和委托是一样的。 事件的声明 public event 委托类型 事件名称 通常事件的命名以事件名称+Event来命名。如public event delegate NotifyEvent; 事件和委托的区别如下: 事件只能在方法的外部

    2024年02月07日
    浏览(29)
  • C# 一个完整的委托、事件学习示例

    该示例符合委托、事件的定义规则,并且可以帮助大家更好地理解委托和事件的使用! 先定义了一个名为 MyEventArgs 的类,继承自 EventArgs ,它包含一个 Message 属性,用于存储传递的消息。 Publisher 类中添加了一个 protected virtual 的方法 OnMyEvent ,用于触发 MyEvent 事件,并传递

    2024年02月07日
    浏览(29)
  • 【C# Programming】委托和lambda表达式、事件

    目录 一、委托和lambda表达式 1.1 委托概述 1.2 委托类型的声明 1.3 委托的实例化 1.4 委托的内部机制  1.5 Lambda 表达式 1.6 语句lambda 1.7 表达式lambda 1.8 Lambda表达式 1.9 通用的委托 1.10 委托没有结构相等性 1.11 Lambda表达式和匿名方法的内部机制 1.12 外部变量 1.13 外部变量的

    2024年02月06日
    浏览(37)
  • 【C#进阶】C#中的委托、事件、回调函数、匿名函数和lambda表达式

    委托是一种类型,它可以存储对一个或多个方法的引用。它类似于C/C++中的函数指针,允许您将方法作为参数传递、存储和调用。 写法: delegate return_type delegate_name( ); return_type :表示委托所引用方法的返回类型。 delegate_name :表示委托的名称。 parameters :表示委托所引用方法

    2024年02月06日
    浏览(47)
  • C#学习笔记--数据结构、泛型、委托事件等进阶知识点

    ArrayList 元素类型以Object类型存储,支持增删查改的数组容器。 因而存在装箱拆箱操作,谨慎使用。 ArrayList和数组区别? ArrayList使用不用说明固定长度,数组则需要 数组存储的是指定类型的,ArrayList是Object ArrayList存在装箱拆箱,数组不存在 ArrayList数组长度用Count获取 而数组

    2024年02月08日
    浏览(35)
  • C#中的委托(Delegate)和事件 (Event)详解与使用范例

    最近天气晴雨不定,你因为害怕打游戏时忘记在下雨时收衣服或者在天晴时把衣服挂出去,于是你委托好友小明在天气发生变化时打电话通知你,这就是一种委托. 下面是这种委托的实例代码 以上代码的输出为 值得一提的是,如下代码为创建一个继承自Delegate类的名为XiaoMing的子类

    2023年04月12日
    浏览(31)
  • 面试常考:C# 委托(delegate、Action、Func、predicate)和事件

    刚开始工作的时候,觉得委托和事件有些神秘,而当你理解他们之后,也觉得好像没有想象中的那么难,这篇博文算是自己对委托和事件的一次梳理和总结。 C#中的委托,相当于C++中的指针函数,但委托是面向对象的,是安全的,是一个特殊的类,当然他也是引用类型,委托

    2024年02月16日
    浏览(37)
  • 每个.NET开发都应掌握的C#委托事件知识点

    上篇文章讲述了C#接口的知识点,本文将介绍C#委托事件知识点。C#作为.NET开发的核心语言之一,提供了丰富的特性来支持面向对象编程和事件驱动的模型。其中,委托和事件是C#中不可或缺的关键概念,每个.NET开发者都应该深入理解它们的作用和用法。委托和事件密不可分,

    2024年02月12日
    浏览(30)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包