小白面试:搞不懂的C#中委托和事件

小白也算工作了5年多,居然在面试基础吃了亏币小白。这不昨天面试回来跟小编分析,面试官问了个基础的问题“委托和事件的区别”。当面试官问到这个问题时,小白顿时有点蒙了,这个问题很熟悉啊,他们的区别是“C#中的事件是一种特殊的委托...嗯...嗯...”,然后就卡壳了,面试官就继续问下一个问题了。这篇文章将简述委托和事件及他们的区别。

要搞懂这个面试问题,还是先从概念入手吧,虽然有点枯燥,文中将用列子来说明币小白

委托和事件的概念

1、委托

C# 中的委托(Delegate)类似于 C 或 C++ 中函数的指针币小白。委托(Delegate) 是存有对某个方法的引用的一种引用类型变量。引用可在运行时被改变。它本质上也是一个类。它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递,这种将方法动态地赋给参数的做法。

作用:可以把方法当参数传递,可以避免在程序中大量使用 If-Else(Switch)语句,同时使得程序具有更好的可扩展性币小白。C#2.0之后出现了匿名函数和lambda表达式也是Delegate演化而来。

列子:

/// <summary>/// 英语说币小白你好/// </summary>/// <param name="name"></param>public static void SayEnglish(String name){Console.WriteLine("Hello," + name);}}//调用public static void Main{dome.Test("张三",dome.SayChinese);//传递的是方法dome.Test("liulei",dome.SayEnglish);}//输出:你好,张三// Hello,liulei

上面用中英文问候的例子是一个简单使用委托的例子,大家可以进一步封装使用币小白

2 、事件

事件是在委托类型变量前加上event关键字,其本质是用来对委托类型的变量进行封装,类似于类的属性对字段的封装币小白

列子:

//输出结果:

展开全文

委托和事件的区别

1、事件是委托的封装,可以理解为一种特殊的委托币小白

2、事件里面其实就两个方法(即add_event和remove_event)和一个私有的委托变量,这两个方法里面分别是对这个私有的委托变量进行的合并和移除,当调用事件的+=时其实是调用的事件里面的add_event方法,同样-=调用的是remove_event方法币小白

3、在注册和注销事件上,委托可以使用=和+=来将函数注册到委托的变量上,使用-=来将函数注销币小白。而事件则有着更严格的限制,事件只能使用+=来将函数注册到其上,使用-=来将函数注销。

结语

这种面试题比较基础,主要考察对C#基础的了解深度,说实话在实际应用中使用的较少币小白。当然如果需要研究.NET源码的话,则必须掌握。面试如果能答出两点,答出事件的使用场景就很不错了。希望本文对你有所帮助,同时欢迎留言和吐槽。

注:事件的案例来源于张子阳的"c#委托 事件"

版权声明:本文来源于网友收集或网友提供,仅供学习交流之用,如果有侵权,请转告版主或者留言,本公众号立即删除币小白

关注公众号: DotNet开发跳槽

觉得不错币小白,请点个在看 呀

评论