日期:2014-05-18  浏览次数:20709 次

代理和委托一样吗?
今天看了别人总结的面试题中有这么一道
代理和委托的关系。代理和委托不是一样的吗?(一直这么认为)

------解决方案--------------------
C# 代理实际上类似于C++中的函数指针,因为C#中不存在指针,所以用代理可以完成一些原来在C++中用函数指针完成的操作,例如传递一个类A的方法m给另一个类B的对象,使得类B的对象能够调用这个方法m。但与函数指针相比,delegate有许多函数指针不具备的优点。首先,函数指针只能指向静态函数,而delegate既可以引用静态函数,又可以引用非静态成员函数。在引用非静态成员函数时,delegate不但保存了对此函数入口指针的引用,而且还保存了调用此函数的类实例的引用。其次,与函数指针相比,delegate是面向对象、类型安全、可靠的受控(managed)对象。也就是说,runtime能够保证delegate指向一个有效的方法,你无须担心delegate会指向无效地址或者越界地址。
------解决方案--------------------
有些面试就像是在刁难背面试的人一样。人家是在找工作,靠劳动挣钱,又不是乞丐在祈求施舍。考官应该把心态放正。
个人感觉判别开发人员水平的是看他对软件产品的理解,对于开发流程的理解,对于接口与结构的理解,以及分工合作的意识。
而不是鸡叫旮旯的找些琐碎的细节来让被面试人出丑。试想,你在面试时百般刁难你得未来的同事,以后怎么和他共事呢?领导一个团队
不能只靠自己的权势,也不能单靠自己的技术,而需要靠领导的亲和性。否则是留不住好手的,公司也永远就是个新兵连。
------解决方案--------------------
代理和委托不同吧,比如远程过程调用,你调用一个远程对象上的方法,事实上对于你来说只是调用了透明代理上的方法,透明代理接到此调用后,打包数据,传到服务器上,由服务器上的残桩还原,再进而对真实对象进行调用。
和委托区别大了.
------解决方案--------------------
在.NET中...如果要把“代理”和“委托”拉到一起说的话...“代理”属于翻译不准确...
------解决方案--------------------
有可能是以下这种情况:
C# code

        public delegate void 委托();
        public static void 委托的实现()
        {
            Console.WriteLine("这就是代理的输出");
        }

        public static void 测试方法(委托 d)
        {
            d();
        }

        static void Main(string[] args)
        {
            委托 代理 = 委托的实现;
            测试方法(代理);
            Console.Read();
        }

------解决方案--------------------
代理是远程过程调用时由系统自动产生的,以前COM+编程时,都有代理和残桩之说。
委托和代理应该是不同的,因为在远程调用时,如remoting中,委托也要通过代理进行数据打包传递的