在C#中实现自定义事件
来源:互联网 发布:学粤语软件哪个软件好 编辑:程序博客网 时间:2024/05/18 02:27
事件编程使得软件技术得到了飞跃似的发展.至于事件编程的好处我就不赘述了.反正它绝对不是用线程就能取代的,因为在某些时候它的优点是线程所无法比拟的:不论在资源的消耗上,还是问题处理的及时性上.所以在学习一门高级语言后,必须能够熟练的使用事件(如果该语言支持事件).可惜的是,虽然我们会使用系统提供的N种事件,但是好多人却不知道如何自定义事件.
下面以一个最最普通的例子来说明如何在C#中实现自定义事件
需求是这样的:用事件监控一个人的名字,如果改变了则输出新名字和老名字(这里不用数据库,仅仅用类中的一个字段来记录.由于个人喜好,这个demo我用命令控制台来演示)
namespace Test
{
class Program
{
static void Main(string[] args)
{
MonitoringNameChangement M = new MonitoringNameChangement();
M.NameChanged += new NameChanged(M_NameChanged);
while (true)
{
Console.WriteLine("请输入一个新的名字,您将会看到您自定义的事件会被执行");
M.ChangeName = Console.ReadLine();
}
}
static void M_NameChanged(string oldName, string NewName)
{
Console.WriteLine("******************************************* 名字已经改变");
Console.WriteLine("新名字是: {0} 老名字是: {1}", NewName, oldName);
Console.WriteLine("******************************************* ");
}
}
//定义一个监控名字变化的委托
public delegate void NameChanged(string oldName, string NewName);
//定义一个名字监控类
public class MonitoringNameChangement
{
private string name = "老名字";
public string ChangeName
{
set
{
//如果输入的是全新的名字,则会调用监控名字的事件,并且存储新名字
if (name != value)
{
NameChanged(name, value);
name = value;
}
}
get
{
return name;
}
}
//监控名字的事件
public event NameChanged NameChanged;
}
}
{
class Program
{
static void Main(string[] args)
{
MonitoringNameChangement M = new MonitoringNameChangement();
M.NameChanged += new NameChanged(M_NameChanged);
while (true)
{
Console.WriteLine("请输入一个新的名字,您将会看到您自定义的事件会被执行");
M.ChangeName = Console.ReadLine();
}
}
static void M_NameChanged(string oldName, string NewName)
{
Console.WriteLine("******************************************* 名字已经改变");
Console.WriteLine("新名字是: {0} 老名字是: {1}", NewName, oldName);
Console.WriteLine("******************************************* ");
}
}
//定义一个监控名字变化的委托
public delegate void NameChanged(string oldName, string NewName);
//定义一个名字监控类
public class MonitoringNameChangement
{
private string name = "老名字";
public string ChangeName
{
set
{
//如果输入的是全新的名字,则会调用监控名字的事件,并且存储新名字
if (name != value)
{
NameChanged(name, value);
name = value;
}
}
get
{
return name;
}
}
//监控名字的事件
public event NameChanged NameChanged;
}
}
在郑宇泽老师的"C#程序设计 第二版"中有一个类似的程序,当时在学校图书馆将这本书借阅了半年,虽然花了很长时间看事件和委托这块,但是很遗憾:当时没明白,有时候明白了,第二天也会忘的一干二净.呵呵,不过说实在的,在那本书中,把事件这块些的有点让人费解.后来工作了,在需要用到自定义事件的时候,居然一下子就写出来了.高兴之余也与许多小师弟师妹们一起分享一下(个人觉得,这个代码比较简洁.^_^).
各位小师弟师妹们,不要因为遇到了问题而气馁,问题总会解决的.你们已经放假了,祝你们春节快乐.来年都能找到满意的工作.也祝CSDN所有的老鸟小鸟们新春快乐,身体健康
- 在C#中实现自定义事件
- C# 实现自定义事件
- 在.Net 中实现自定义事件
- C#中自定义控件中带参数事件的实现
- C#自定义事件实现简介
- C# 中如何自定义事件?
- C# 中如何自定义事件?
- C# 中如何自定义事件?
- C# 中如何自定义事件?
- C# 中如何自定义事件?
- C#中如何自定义事件
- 使用委托在用户自定义控件中实现事件响应
- 在反射中实现用户自定义控件的事件响应
- 在c#中实现DataGridView中自定义控件列
- 在类中自定义事件
- 在C#中处理事件
- 在C#中处理事件
- c# 实现自定义事件访问器 和 实现接口事件
- vs调试方法
- FrameBuffer详解
- VC常用数据类型使用转换详解
- Eclipse+XAMPP组合搭建PHP开发环境
- 微软的招聘哲学——做微软人的五大核心素质(摘自《微软360度》)
- 在C#中实现自定义事件
- 自我绊倒的面试——顾建荣(摘自《微软360度》
- 12条标准决定你是富是穷!
- Oracle数据库入门心得
- javascrpt
- [VC MFC C++ flex bison] flex rules(规则)
- 也谈谈scanf 用法(寒假c语言之一)
- [VC MFC C++ flex bison] flex format
- 优秀思维方式——每日一语(2008-02-01)