首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

关于接口,嘱托,事件.求指点

2013-09-05 
关于接口,委托,事件...求指点!1.)第一个问题我觉得委托和接口的应用惊人的相似,除了委托能把多个方法(也可

关于接口,委托,事件...求指点!
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。。而且在对象赋值时还要使用+=或-=。。这样做的意义到底何在?


求各位大大帮忙解答

委托???接口??事件
[解决办法]
委托和接口完全是两个概念吧,委托就是个指针,就是个方法定义,而接口可以包含更多的信息,可以被继承
event表名是个事件
[解决办法]
委托就是方法的参数里面可以接收另一个方法的指针,然后在方法中异步调用该方法。

接口是为了抽象不同对象之间的相同方法。

event就是一个委托。

撸主的思绪很混乱,建议多看些书。
[解决办法]
委托是对一类方法的封装  一般是和事件一起用  主要实现的功能是某一动作"触发"另一个行为的发生
接口:是行为的规范 不同对象之间的功能行为
[解决办法]
不一样的东西就是有不一样用途,委托是方法级别的,而接口是类级别的,不是一个层次,怎么可以一概而论。
[解决办法]
我觉得委托和接口的应用惊人的相似,除了委托能把多个方法(也可以说是多个现实吧)添加到委托的变量当中,然后对变量进行调用,就能依次执行添加的方法。。而接口没这东西。。感觉除了这一点,没有别的不同了。。

没错,事实上在语言层面上,Java没有委托,那么它的事件是怎么处理的呢,就是使用接口(Runnable)。C++连接口都没有,设计模式反复使用抽象类实现诸如策略、观察者等模式。本质上说,所谓委托,其实也就是一个特殊的抽象基类(System.Delegate)的派生类。

能够理解委托和接口的相似之处,这说明你确实有了一些自己的理解和思考。这非常好!
[解决办法]
至于事件,实际上是多播委托(MultiCast Delegate)在C#语法层次上的语法糖。多播委托允许多个对象去订阅同一个事件。

都会默认变成private


只是C#不允许你直接操作它而已,不代表它是private的。
[解决办法]
打个比方跟你说,高压锅既可以煮饭,也可以煲汤,用高压锅来做什么在生产时是不知道的。用接口做的话,接口里这2个方法都得定义。如果高压锅要增加一个烧水的功能,高压锅就得重新做了

热点排行