| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 783 人关注过本帖
标题:[求助]事件和委托的问题
只看楼主 加入收藏
kuian
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2006-2-4
收藏
 问题点数:0 回复次数:3 
[求助]事件和委托的问题

本人正刚开始学习C#
现在学习到委托和事件了,小弟有些不明白了请个位高手指点:


我觉得事件就是委托
只不过是有2个参数(object 和 eventargs)和void返回类型和 关键字event的 特殊的委托

例如下面这两个程序,一个是用委托做的,一个是用事件做的。他们完成同一个功能。而且代码几乎相同
我就不懂了 , 既然能使用委托来完成,干吗还要用事件来完成,他们有什么区别,是什么关系呢??????????

///////////////////////////////////////委托//////////////////////////////////////////////
using System;

namespace a
{
class UserInputMonitor
{
public delegate void UserRequest();
public UserInputMonitor.UserRequest OnUserRequest;
public void Run()
{ do
{
if (Console.ReadLine()=="h")
{
OnUserRequest();
}
}while(true);
}
}
public class Client
{
public static void Main()
{
UserInputMonitor monitor=new UserInputMonitor();
new Client(monitor);
monitor.Run();
}
private static void ShowMessage()
{
Console.WriteLine("委托"+" "+"HaHa!!");
}
Client(UserInputMonitor m) {
m.OnUserRequest = new UserInputMonitor.UserRequest(Client.ShowMessage);
}
}
}
//////////////////////////////////////////////////////////////////////////////////////////////


/////////////////////////////////////////////事件///////////////////////////////////////////////////

using System;

namespace 事件
{
using System;
class UserInputMonitor
{
public delegate void UserRequest(object sender,EventArgs e); //定义委托
public event UserRequest OnUserRequest; //此委托类型类型的事件
public void Run()
{

do
{
if (Console.ReadLine()=="h")
{

Console.WriteLine("this is envent");
OnUserRequest(this,new EventArgs());
}
}while(true);
}
}

public class Client
{

public static void Main()

{
UserInputMonitor monitor=new UserInputMonitor();

new Client(monitor);

monitor.Run();

}

private void ShowMessage(object sender,EventArgs e)
{

Console.WriteLine("事件"+" "+"HaHa!!");

}
Client(UserInputMonitor m)
{
m.OnUserRequest+=new UserInputMonitor.UserRequest(this.ShowMessage);
}
}

搜索更多相关主题的帖子: 委托 void event object 
2006-02-04 11:33
live41
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:67
帖 子:12442
专家分:0
注 册:2004-7-22
收藏
得分:0 
不好意思,委托我看过后就忘了,因为就连wrox的书都说得不清不楚,也可能是翻译的问题。

反正我只知道事件一般都用到委托,就先当没有区别吧。

老实说,我搞了几个小软件和4个中软件,都没用到委托。

建议看得懂就看,看不懂就算了。
2006-02-04 12:42
ROEN
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2006-2-4
收藏
得分:0 
这个当初我也糊涂了好一会,你把event关键字去掉后程序依然可以执行。从event的定义中(指程序中的初始化)就可以看出,事件就是一个委托。这是我自己的看法,不对的地方还请高手指点
不过你可以看看这个
Put simply, an event gives more limited access than a delegate. If an event is made public, code in other classes can only add or remove handlers for that event; they can't necessarily fire it, find out all the handlers for it, or remove handlers they don't know about. Events also allow more flexibility in terms of how the handlers are stored.
全文:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dncscol/html/csharp04192001.asp

[此贴子已经被作者于2006-2-4 15:06:10编辑过]

2006-02-04 15:03
kuian
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2006-2-4
收藏
得分:0 


非常感谢2位!! 这个问题困饶我好几天。 看来这确实是一个容易糊涂的地方。
2006-02-04 15:51
快速回复:[求助]事件和委托的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.035712 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved