最近在学习委托与事件的时候,自己写了个很简单的Demo,代码如下:namespace ConsoleApplication1
{
public class EventClass //事件触发
{
public delegate void MyHandler();
public event MyHandler MyEvent;
public void Run()
{
if (MyEvent != null)
MyEvent();
}
} public class ReceiverClass//事件接收
{
public ReceiverClass(EventClass c)
{
c.MyEvent += new EventClass.MyHandler(c_MyEvent);
} public void c_MyEvent()//事件处理程序
{
Console.WriteLine("Received!");
}
} public class Program
{
static void Main(string[] args)
{
EventClass c = new EventClass();
ReceiverClass r = new ReceiverClass(c);
c.Run();
Console.ReadLine();
}
}
}运行结果: "Received!".现在的疑问是:
事件接收的类一定要用构造函数来订阅事件吗?
于是我写了一个方法:
public class ReceiverClass
{
EventClass c = new EventClass();
public void MyReceiver()
{
c.MyEvent+=new EventClass.MyHandler(c_MyEvent);
}
}
public class Program
{
static void Main(string[] args)
{
EventClass c = new EventClass();
ReceiverClass r = new ReceiverClass();
r.MyReceiver(); //增加
c.Run();
Console.ReadLine();
}
}
大家看看为什么运行结果不能显示"Received!"呢?
{
public class EventClass //事件触发
{
public delegate void MyHandler();
public event MyHandler MyEvent;
public void Run()
{
if (MyEvent != null)
MyEvent();
}
} public class ReceiverClass//事件接收
{
public ReceiverClass(EventClass c)
{
c.MyEvent += new EventClass.MyHandler(c_MyEvent);
} public void c_MyEvent()//事件处理程序
{
Console.WriteLine("Received!");
}
} public class Program
{
static void Main(string[] args)
{
EventClass c = new EventClass();
ReceiverClass r = new ReceiverClass(c);
c.Run();
Console.ReadLine();
}
}
}运行结果: "Received!".现在的疑问是:
事件接收的类一定要用构造函数来订阅事件吗?
于是我写了一个方法:
public class ReceiverClass
{
EventClass c = new EventClass();
public void MyReceiver()
{
c.MyEvent+=new EventClass.MyHandler(c_MyEvent);
}
}
public class Program
{
static void Main(string[] args)
{
EventClass c = new EventClass();
ReceiverClass r = new ReceiverClass();
r.MyReceiver(); //增加
c.Run();
Console.ReadLine();
}
}
大家看看为什么运行结果不能显示"Received!"呢?
解决方案 »
- c# 怎样获取到本机子的域名称和域帐号
- 用Visaul C#怎么写 打开其他某某程序后会连带运行自己的程序
- UpdatePanel 中怎么添加div?
- 如何获得GridView自动生成的“编辑”后输入的新数据?
- 关于物资管理的数据库如何设计?
- 怎么用命令打开一个网页啊??急。。高手请帮忙!!!
- @@@---SqlServer2005中CLR User-Defined Types的存储限制问题!!!火大啊!!!!!!!
- 有关remoting的问题?在线等!!!
- 请介绍几个C#从入门到精通的书籍或网站
- !!!!!!!!!!!!!!!高手请诊断一下!!!!!!
- 读取word内容 并读取格式
- C#: 已存于datatable的数据如何存盘成Visual Foxpro的DBF文件?(任何版本)
{
EventClass c = new EventClass();
public void MyReceiver()
{
c.MyEvent+=new EventClass.MyHandler(c_MyEvent);
}
}
public class Program
{
static void Main(string[] args)
{
EventClass c = new EventClass();
ReceiverClass r = new ReceiverClass();
r.MyReceiver(); //增加
c.Run(); //这里c和r没有任何关系,如何run呢? 改成r.c.Run()
Console.ReadLine();
}
}
当然不可能输出你想要的结果了
{
// EventClass c = new EventClass();
public void MyReceiver(EventClass c)
{
c.MyEvent+=new EventClass.MyHandler(c_MyEvent);
}
public void c_MyEvent()//事件处理程序
{
Console.WriteLine("Received!");
} }
public class Program
{
static void Main(string[] args)
{
EventClass c = new EventClass();
ReceiverClass r = new ReceiverClass();
r.MyReceiver(c); //增加
c.Run();
Console.ReadLine();
}
}
ReceiverClass r = new ReceiverClass();
r.MyReceiver(); //增加
r.c.run();