关于委托事件event的问题(求高手大侠解答)谢谢 在线等...
代码如下:
using System;
class PubEventArgs : EventArgs  
{
	private readonly string m_MagazineName;
	private readonly DateTime m_PubDate;
	public PubEventArgs(string MagazineName,DateTime PubDate)
	{
		m_MagazineName=MagazineName;
		m_PubDate=PubDate;
	}
	public string MagazineName
	{
		get {return m_MagazineName;}
	}
	public DateTime PubDate
	{
		get {return m_PubDate;}
	}
}
class Publisher//在事件发行者中定义一个事件
{
	public delegate void PubComputerEventHandler(object sender,PubEventArgs e);
	public event PubComputerEventHandler PubComputer;	
	protected virtual void onPubComputer(PubEventArgs e)
	{
		PubComputerEventHandler Handler=PubComputer;
		if (Handler!=null)
		{
			Handler(this,e);
		}
	}
	public void issueComputer(string MagazineName,DateTime PubDate)//在事件发行者中触发事件
	{
		Console.WriteLine("发行"+MagazineName);
		onPubComputer(new PubEventArgs(MagazineName,PubDate));
	}
}
class Subcriber//在事件订阅者中定义事件处理程序
{
	private string name;
	public Subcriber (string name)
	{
		this.name=name;
	}
	public void Receive(object sender,PubEventArgs e)
	{
		Console.WriteLine (e.PubDate+""+name+"已经收到"+e.MagazineName);
	}
}
class story
{
	static void Main()
	{
		Publisher Pub=new Publisher();
		Subcriber zs=new Subcriber("张三");
		Pub.PubComputer+= new Publisher.PubComputerEventHandler(zs.Receive);//订阅事件
		Pub.issueComputer("电脑杂志",Convert.ToDateTime("2012-12-12"));
	}
}
疑问:(每问20分)
1、Handler(this,e);语句中传递的this参数代表的是Handler这个委托事件本身吗?
2、this是传递给方法Receive()使用的,但是这里没有体现出this传递进去只有有什么作用。
3、类PubEventArgs为什么一定要从EventArgs 派生呢?
4、event关键字在这里去掉也可以。请问event关键字什么情况下才有用呢?event关键字的作用是什么?
------解决方案--------------------
你这里应该是Publisher的实例,就是调用Handler的那个实例
this那只是没用而已,很多事件都有一个sender,你应该知道吧,比如按钮的click,这个sender就是你点击的那个按钮,你可以不用,也可以通过它去访问是哪个对象触发的
不一定,这里只是需要而已
event,这个你看帮助解释吧,这样可以在自定义组件中的事件列表中看到你自定义的事件
------解决方案--------------------
1. this 很明确指Publisher, 指由谁发布,即时间的触发者。
2. 没错确实给Recieve()用的,这里没用到并不代表它没意义。就好象你收到一封信,总是会有个发信人一样。
3. EventArgs  是framework里面事件申明基础类,此类不包含事件数据,在事件引发时不向事件处理程序传递状态信息的事件会使用此类。如果事件处理程序需要状态信息,则应用程序必须从此类派生一个类来保存数据。
4. 不加Event的话申明的是一个委托,加了就是一个事件。 至于事件和委托有什么区别,建议单独看看文章。
   事件本身是一种特殊的委托。
------解决方案--------------------
1、Handler(this,e);语句中传递的this参数代表的是Handler这个委托事件本身吗?
不是,可以理解成执行者。
2、this是传递给方法Receive()使用的,但是这里没有体现出this传递进去只有有什么作用。
可以通过sender 得知当前的执行者的相关信息。
3、类PubEventArgs为什么一定要从EventArgs 派生呢?
EventArgs  -》 Event的Args ,所有事件参数的基类    
4、event关键字在这里去掉也可以。请问event关键字什么情况下才有用呢?event关键字的作用是什么?
具体用法参看MSDN