.NET程序员面试指南:解释委托的基本原理

 请解释委托的基本原理
本文节选自《.NET程序员面试指南》一书

    面试中这样的问题偶尔会出现,提问这样的问题,面试官主要意图是为了考查应聘者对.NET特性的了解。这样的细节问题很容易被程序员忽略,读者应该在平时学习的过程中注意积累。
  所涉及到的知识点
•    委托的基本原理
•    委托类型继承结构
  分析问题
   委托这一概念对于有过C++经验的程序员来说并不陌生,C++中的函数指针和委托确实非常类似,很多程序员也很喜欢把.NET中的委托称呼为安全的函数指针,无论这一说法是否正确,但委托确实实现了和函数指针非常类似的功能,那就是提供了程序回调指定方法的机制。
   在委托的内部,包含了一个指向某个方法的指针,在这一点上,委托的实现机制和C++的函数指针完全相同。之所以称委托是安全的,是因为委托和其他所有的.NET成员一样,是一种类型,任何委托对象都是System. Delegate的某个派生类的一个对象,在.NET框架中,任何自定义的委托都继承自祖父类System.Delegate。在这个类中,定义了大部分委托的特性,而关于System.MulticastDelegate的特性,将在后续章节中有所覆盖。现在来分析一个具体的例子。
代码6-1  一个简单的委托:SimpleDelegate.cs
using System;
namespace NET.MST.Sixth.SimpleDelegate
{
    class SimpleDelegate
    {
        /// <summary>
        /// 定义的委托。
        /// </summary>
        /// <param name="i">接受一个整型参数</i>
        public delegate void TestDelegate(int i);
        static void Main(string[] args)
        {
            //调用委托方法
            TestDelegate d = new TestDelegate(PrintMessage1);
            d(0);
            d(1);
            Console.Read();
        }
        /// <summary>
        /// 一个静态方法,符合TestDelegate的定义
        /// </summary>
        /// <param name="i">整型参数</param>
        static void PrintMessage1(int i)
        {
            Console.WriteLine("第" + i + "个方法");
        }
    }
}
在代码6-1中,首先通过public delegate void TestDelegate(int i);定义了一种名为TestDelegate的新类型,该类型继承自System.MulticastDelegate。而且它会包含一个名为Invoke的方法,该方法接受一个整数型的参数并没有任何返回。这些步骤都是由C#编译器自动完成的。
然后,申明了一个TestDelegate的对象d,并且绑定了一个静态的方法void PrintMessage1(int i)到该委托上。在这里读者需要注意的是,委托既可以接受实例方法,也可以接受静态方法,其中的内在区别将在本章后文中有所覆盖。最后,也是最令人期待的部分,d被调用执行:d(0); d(1); 在这里读者可能会对这个形式的代码产生困惑,事实上,这只是C#设计者们为了简化程序员的输入而设计的一种语法而已。
本质上,委托的调用就是执行了在定义委托时所生成的Invoke方法。
为了容易理解,读者完全可以尝试把委托的调用部分写成如下形式:
d.Invoke(0);
d.Invoke(1);
当执行委托时,.NET检查委托对象并找到PrintMessage1(int i)方法,然后把参数传递给该方法并且执行。
下面是这段小程序的执行结果:
第0个方法
第1个方法
  答案
委托是一类继承自System.Delegate的类型,每个委托对象至少包含了一个指向某个方法的指针,该方法可以是实例方法,也可以是静态方法。委托实现了回调方法的机制,能够帮助程序员设计更加简洁优美的面向对象程序。

http://www.china-pub.com/508880
}J J l/m8rsm13164110
f.M T6?+~ Q13164110【书名】.NET程序员面试指南
【作者】朱毅 等 编著
【ISBN】978-7-121-07675-6
【出版社】电子工业出版社
【出版日期】2008年12月
【宣传语】
从面试的角度来梳理.NET程序员的技术功底。
以项目开发经理的眼光来审视编程知识的掌握。
【内容简介】
本 书着重针对.NET技术职位的应聘者,在.NET框架各个技术类别中,选取最常出现在.NET面试中的问题,进行分析和解答,同时解释和剖析和该问题相关 的.NET机制原理,帮助读者达到知其然更知其所以然的程度。本书几乎包揽了所有常见的面试题,从基础知识、数据库,再到比较流行的XML、测试方法和算 法,是目前市场上唯一一本面试试题集锦。
全书配合了大量的图例及代码说明,非常适合正打算参加.NET技术职位的应聘和希望梳理.NET框架下技术点的读者阅读
posted @ 2008-12-19 08:19  我的javaIT  阅读(214)  评论(0编辑  收藏  举报