在C#中实现自定义事件

事件编程使得软件技术得到了飞跃似的发展.至于事件编程的好处我就不赘述了.反正它绝对不是用线程就能取代的,因为在某些时候它的优点是线程所无法比拟的:不论在资源的消耗上,还是问题处理的及时性上.所以在学习一门高级语言后,必须能够熟练的使用事件(如果该语言支持事件).可惜的是,虽然我们会使用系统提供的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;
    }
}

 

在郑宇泽老师的"C#程序设计 第二版"中有一个类似的程序,当时在学校图书馆将这本书借阅了半年,虽然花了很长时间看事件和委托这块,但是很遗憾:当时没明白,有时候明白了,第二天也会忘的一干二净.呵呵,不过说实在的,在那本书中,把事件这块些的有点让人费解.后来工作了,在需要用到自定义事件的时候,居然一下子就写出来了.高兴之余也与许多小师弟师妹们一起分享一下(个人觉得,这个代码比较简洁.^_^).

各位小师弟师妹们,不要因为遇到了问题而气馁,问题总会解决的.你们已经放假了,祝你们春节快乐.来年都能找到满意的工作.也祝CSDN所有的老鸟小鸟们新春快乐,身体健康

你可能感兴趣的:(在C#中实现自定义事件)