读书人

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

发布时间: 2013-09-05 16:02:07 作者: rapoo

关于接口,委托,事件...求指点!
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个方法都得定义。如果高压锅要增加一个烧水的功能,高压锅就得重新做了

读书人网 >C#

热点推荐