1.)第一个问题我觉得委托和接口的应用惊人的相似,除了委托能把多个方法(也可以说是多个现实吧)添加到委托的变量当中,然后对变量进行调用,就能依次执行添加的方法。。而接口没这东西。。感觉除了这一点,没有别的不同了。。这两个东西的思想实在太像了,都是为了实现多态,感觉委托能做的,接口都能做(除了上面说的那点)。。那我们到底什么时候才用委托呢?两者到底有什么不同呢?希望能就理论,和实际的应用举个例子,谢谢!!
2.)第二个问题关于event关键字,事件..
namespace Delegate {
       //定义委托,它定义了可以代表的方法的类型
       public delegate void GreetingDelegate(string name);
      
       //新建的GreetingManager类
       public class GreetingManager
       {
           //这里加了个event
           public event GreetingDelegate MakeGreet;           public void GreetPeople(string name, GreetingDelegate MakeGreeting)
           {
               MakeGreeting(name);
           }
       }
       class Program
       {
           private static void EnglishGreeting(string name)
           {
               Console.WriteLine("Morning, " + name);
           }           private static void ChineseGreeting(string name)
           {
               Console.WriteLine("早上好, " + name);
           }           static void Main(string[] args)
           {
               GreetingManager gm = new GreetingManager(); 
               //声明了event后,就不能直接gm.MakeGreet=XXX来赋值了..
               gm.MakeGreet += ChineseGreeting;               
           }
       }
}
上面这段代码
 public event GreetingDelegate MakeGreet;
这里加个event到底有什么意义?封装?有意义吗?加了之后无论前面的前缀是什么,都会默认变成private。。而且在对象赋值时还要使用+=或-=。。这样做的意义到底何在?
求各位大大帮忙解答委托   接口  事件

解决方案 »

  1.   

    委托和接口完全是两个概念吧,委托就是个指针,就是个方法定义,而接口可以包含更多的信息,可以被继承
    event表名是个事件
      

  2.   

    委托就是方法的参数里面可以接收另一个方法的指针,然后在方法中异步调用该方法。接口是为了抽象不同对象之间的相同方法。event就是一个委托。撸主的思绪很混乱,建议多看些书。
      

  3.   

    event表明是个事件,委托是一对一。事件,事要一对多,+=是绑定 -=是解除绑定
      

  4.   

    event C#编译器为你生成一个委托的列表,你几时看到过把一个整数赋值给一个整数集合,你只能加紧和删除
      

  5.   

    我觉得委托和接口的应用惊人的相似,除了委托能把多个方法(也可以说是多个现实吧)添加到委托的变量当中,然后对变量进行调用,就能依次执行添加的方法。。而接口没这东西。。感觉除了这一点,没有别的不同了。。没错,事实上在语言层面上,Java没有委托,那么它的事件是怎么处理的呢,就是使用接口(Runnable)。C++连接口都没有,设计模式反复使用抽象类实现诸如策略、观察者等模式。本质上说,所谓委托,其实也就是一个特殊的抽象基类(System.Delegate)的派生类。能够理解委托和接口的相似之处,这说明你确实有了一些自己的理解和思考。这非常好!
      

  6.   

    至于事件,实际上是多播委托(MultiCast Delegate)在C#语法层次上的语法糖。多播委托允许多个对象去订阅同一个事件。都会默认变成private
    错只是C#不允许你直接操作它而已,不代表它是private的。
      

  7.   

    event为什么会用+=、-=这种呢,因为事件是可以叠加的,在封装好的类里可能是有做叠加操作的,如果让他能用等于符号操作的话,那么就等于是重新赋值了,原先叠加的一些操作就全部没了
      

  8.   


    没有事件一样可以做出“叠加”来,做法看《设计模式》的“观察者模式”。可能我没有说的很清楚。我的意思是,委托是对某一类用接口实现的需求的一种简化和抽象。委托能做的,是接口能做的事情的一个子集。我们知道,高级语言中的全部特性,无论是委托还是对象,甚至循环,在编译器处理后,统统都不存在了,全部可以用CPU能理解的那几百条指令等价实现(否则程序也没有意义了)。高级语言的语法特性,你从必要性的角度看,你想破脑袋你也想不明白它们为什么存在。没有委托就不能写程序了?没有接口就不能写程序了?没有抽象类就不能写程序了?显然都不是。你要从编程语言的抽象能力对于减少需要书写的代码数量,提高可读性,提高效率的角度去思考。
      

  9.   


    没有事件一样可以做出“叠加”来,做法看《设计模式》的“观察者模式”。可能我没有说的很清楚。我的意思是,委托是对某一类用接口实现的需求的一种简化和抽象。委托能做的,是接口能做的事情的一个子集。我们知道,高级语言中的全部特性,无论是委托还是对象,甚至循环,在编译器处理后,统统都不存在了,全部可以用CPU能理解的那几百条指令等价实现(否则程序也没有意义了)。高级语言的语法特性,你从必要性的角度看,你想破脑袋你也想不明白它们为什么存在。没有委托就不能写程序了?没有接口就不能写程序了?没有抽象类就不能写程序了?显然都不是。你要从编程语言的抽象能力对于减少需要书写的代码数量,提高可读性,提高效率的角度去思考。
    我想你是误解我的意思了,我是在说event要用+=、-=的原因