- 1、本文档共14页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
面试中的委托
4.3 委托(1)
委托技术是.NET框架中的高级特性之一,也可以说是.NET重要技术之一,是在大多数的技术笔试、面试中必定出现的部分。委托提供了安全的函数回调(CALL BACK)机制,成为程序员设计灵活简洁的.NET程序的重要方法之一。本章节将通过介绍委托概念和分析一些常见的委托技术题。
面试题55 什么是委托
.NET面试中经常会被提问什么是C#中的委托,面试官主要意图是考察应聘者对.NET的几个重要特性的了解。这样的细节问题往往让程序员不能够准确地回答,读者应该在平时学习的过程中注意积累。
【出现频率】★★★★★
【关键考点】
委托(Delegate)
委托的特点
【考题分析】
委托是一种引用类型,它是函数指针的托管版本。在C#中,委托是一种可以把引用存储为函数的类型。委托可以引用实例和静态方法,而函数指针只能引用静态方法。委托的声明非常类似函数,和函数不同的是委托不带函数体,并且需要使用Delegate关键字。委托的声明指定了一个函数签名,其中包含参数列表和一个返回类型。在定义了委托后,就可以声明该委托类型的变量,然后可以将这个变量初始化为与该委托有相同签名的函数进行引用,随后可以使用委托变量调用该函数。
注意:委托虽然与函数指针非常类似,但却不是指针。许多程序员把.NET中的委托理解为安全的函数指针,这样的理解是比较牵强的,委托实现的功能和函数指针非常类似的一点就是提供了程序回调机制。
委托的内部实现机制和函数指针在指向方法这一点上是完全相同的。委托是安全的,主要因为委托和其他所有的.NET成员一样,均是一种类型,都是System.Delegate的某个派生类的一个对象。
现在来分析一个具体的例子,示例代码如下:using System; namespace MyConsole { class SimpleDelegate { //定义一个返回为double类型的委托,这个委托有一个整型的输入参数 public delegate double Delegate_Prod(int a); static double fn_Prodvalues(int val1) { return val1 * val1; } static void Main(string[] args) { Delegate_Prod delObj = new Delegate_Prod(fn_Prodvalues); //声明一个委托 Console.Write(请输入数字); int v1 = Int32.Parse(Console.ReadLine());
//输入一个整型数值 double res = delObj(v1);
//调用委托方法fn_Prodvalues Console.WriteLine(返回值: + res); //返回结果 Console.ReadLine(); } } }
示例代码中,首先通过public delegate double Delegate_Prod(int a)定义了一种名为Delegate_Prod的新类型,这个类型继承自System.MulticastDelegate。它包含一个名为Invoke()的方法,该方法接收一个字符型的参数且没有任何返回。这些步骤都是由C#编译器自动完成的。然后,声明了一个Delegate_Prod的对象delObj,并且绑定到fn_Prodvalues这个静态方法上。运行结果如下:请输入数字9 返回值: 81
注意:本质上,委托的调用就是执行了在定义委托时所生成的Invoke()方法。
C#中的委托类都继承自System.Delegate类型。委托类型的声明与方法签名相似,有一个返回值和任意数目任意类型的参数。委托是一种可用于封装命名或匿名方法的引用类型。委托类似于函数指针,但是委托是类型安全和可靠的。
面试题56 C#中被委托的方法必须是静态的吗
关于委托的方法是否必须是静态方法这个考题,考察点非常明确。面试官一般希望了解应聘者是不是仅仅了解如何定义和简单的使用委托,是否真正掌握理解委托的内部原理。
【出现频率】★★★★★
【关键考点】
静态方法与实例方
文档评论(0)