#]//谁能帮我把下面的代码改变串成一个console程序呢?谢谢。

xiaotuzi 2009-01-27 10:37:00
[code=C

using System;

//谁能帮我把下面的代码改变串成一个console程序呢?谢谢。代码里面的代码可能不是像下面这样在一个类里面的哟。可能缺少一些代码,有挑战性的。

public delegate void TestEventDelegate(object sender, System.EventArgs e);

public class EventSource
{
public event TestEventDelegate TestEvent;
private void RaiseTestEvent()
{
//safely invoke an event
TestEventDelegate temp = TestEvent;

if (temp != null)
{
temp(this, new System.EventArgs());

}

}
}

public class EventReceiver
{
public void ReceiveTestEvent(object sender, System.EventArgs e)
{
System.Console.Write("event received from ");
System.Console.WriteLine(sender.ToString());
}

public void Subscribe(EventSource source)
{
TestEventDelegate temp = new TestEventDelegate(ReceiveTestEvent);
source.TestEvent += temp;

}

public void UnSubscribe(EventSource source)
{
TestEventDelegate temp = new TestEventDelegate(ReceiveTestEvent);
source.TestEvent -= Temp;
}
}

public class EventSource2
{
private TestEventDelegate TestEventHandlers;
public event TestEventDelegate TestEvent
{
add
{
lock (TestEventHandlers)
{
TestEventHandlers += value;
}
}
remove
{
lock (TestEventHandlers)
{
TestEventHandlers -= value;
}
}
}
private void RaiseTestEvent()
{
//safely invoke an event
TestEventDelegate temp = TestEventHandlers;

if (temp != null)
{
temp(this, new System.EventArgs());
}
}
}
[/code]
...全文
91 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiaotuzi 2009-01-28
  • 打赏
  • 举报
回复
谢谢...结贴送分.
king19840811 2009-01-28
  • 打赏
  • 举报
回复
sender.ToString()是输出当前实例的类型不可能输出event1
xiaotuzi 2009-01-28
  • 打赏
  • 举报
回复
还有就是为什么输出System.Console.WriteLine(sender.ToString());//出来的是Sort.EventSource?
要想出来event1怎么办呢?谢谢.
king19840811 2009-01-28
  • 打赏
  • 举报
回复
if (temp != null)
{
temp(this, new System.EventArgs());///为什么到这一句会跑到public void ReceiveTestEvent()这个EventReceiver里面去执行呢?谢谢

}

temp就是激活事件,
EventReceiver
public void Subscribe(EventSource source)
{
TestEventDelegate temp = new TestEventDelegate(ReceiveTestEvent);
source.TestEvent += temp;

} 这里订阅了一个事件。
而该事件所调用的方法就是public void ReceiveTestEvent()
xiaotuzi 2009-01-28
  • 打赏
  • 举报
回复
首先谢谢上面的,偶有疑问

if (temp != null)
{
temp(this, new System.EventArgs());///为什么到这一句会跑到public void ReceiveTestEvent()这个EventReceiver里面去执行呢?谢谢

}
king19840811 2009-01-27
  • 打赏
  • 举报
回复
using System;
using System.Collections.Generic;
using System.Text;

namespace Sort
{
class Program
{
static void Main(string[] args)
{

EventSource event1 = new EventSource();


EventReceiver evr=new EventReceiver();
evr.Subscribe(event1);//添加事件
event1.AddandRemoveEvent();
evr.UnSubscribe(event1);//移除事件
event1.AddandRemoveEvent();
Console.Read();
}
}
public delegate void TestEventDelegate(object sender, System.EventArgs e);

public class EventSource//事件源类1
{
public event TestEventDelegate TestEvent;//事件定义
private void RaiseTestEvent()
{
//safely invoke an event
TestEventDelegate temp = TestEvent;

if (temp != null)
{
temp(this, new System.EventArgs());

}

}
//winform或webform中可能是通过一个按钮事件或者某个其它控件事件响应,这里只是简单的用了一个方法
public void AddandRemoveEvent()
{
RaiseTestEvent();
}
}

public class EventReceiver//事件接收类
{

public void ReceiveTestEvent(object sender, System.EventArgs e)
{
System.Console.Write("event received from ");
System.Console.WriteLine(sender.ToString());
}

public void Subscribe(EventSource source)
{
TestEventDelegate temp = new TestEventDelegate(ReceiveTestEvent);
source.TestEvent += temp;

}

public void UnSubscribe(EventSource source)
{
TestEventDelegate temp = new TestEventDelegate(ReceiveTestEvent);
source.TestEvent -= temp;
}
}

public class EventSource2//事件源类2与事件源类1基本相同
{
private TestEventDelegate TestEventHandlers;
public event TestEventDelegate TestEvent//事件定义
{
add//+=的事件访问器实现的方式
{
lock (TestEventHandlers)
{
TestEventHandlers += value;
}
}
remove//-=事件移除器实现的方式
{
lock (TestEventHandlers)
{
TestEventHandlers -= value;
}
}
}
private void RaiseTestEvent()
{
//safely invoke an event
TestEventDelegate temp = TestEventHandlers;

if (temp != null)
{
temp(this, new System.EventArgs());
}
}
}
}

111,131

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧