物以类聚 人以群分

世上本无路,走的人多了便有了路!慢慢人生路,我会一直不停是去寻找那份财富!
事件的应用

    class PubEventArgs : EventArgs
    
{
        
private readonly string m_name;
        
private readonly DateTime m_date;
        
public PubEventArgs (string name,DateTime date )
        
{
            m_name
=name ;
            m_date 
= date;
        }

        
public string name
        
{
            
get 
            
{
                
return m_name;
            }

        }

        
public DateTime  date
        
{
            
get
            
{
                
return m_date;
            }

        }


    }

    
class Publisher   //发行方
    {
        
public delegate void PubComputerEventHandler(object sender, PubEventArgs e);   //定义委托
        public delegate void PubLifeEvertHandler(object sender, PubEventArgs e);       //定义委托
        public event PubComputerEventHandler pubcomputer;       //定义事件      格式:【访问修饰符】 + event + 委托 +事件名
        public event PubLifeEvertHandler publife;               //定义事件
        public virtual void OnComputer(PubEventArgs e)   
        
{
            PubComputerEventHandler handler 
= pubcomputer;   //声明临时委托
            if (handler != null)
            
{
                handler(
this,e );
            }

        }

        
public virtual void OnLife(PubEventArgs e)
        
{
            PubLifeEvertHandler handler 
= publife;
            
if(handler !=null )
            
{
                handler(
this, e);
            }

        }

        
public void IstureComputer(string name, DateTime date)  //触发电脑杂志事件
        {
            Console.WriteLine(
"发行" + name);
            OnComputer(
new PubEventArgs (name,date )); 
        }

        
public void IstrueLife(string name, DateTime date)    //触发生活杂志事件
        {
            Console.WriteLine(
"发行" + name);
            OnLife(
new PubEventArgs(name, date));
        }


    }

    
class Reader    //订阅事件
    {
        
private string name;
        
public Reader(string name)
        
{
            
this.name = name;
        }

        
public void Receive(object sender, PubEventArgs e)  //必须和委托参数一样
        {
            Console.WriteLine(e.date 
+ "已收到" + name + e.name);
        }

    }

    
class Test
    
{
        
static void Main()
        
{
            Publisher aa 
= new Publisher();
            Reader zs 
= new Reader("张三");
            
//订阅事件   格式:事件名+=new 委托名()
            aa.pubcomputer += new Publisher.PubComputerEventHandler(zs.Receive);   //触发事件
            Reader ls = new Reader("李四");
            aa.pubcomputer 
+= new Publisher.PubComputerEventHandler(ls.Receive);  //触发事件
            aa.publife += new Publisher.PubLifeEvertHandler(ls.Receive);          //触发事件
            aa.IstureComputer ("电脑杂志" , Convert.ToDateTime("2005-08-18"));
         
            aa.IstrueLife(
"生活杂志" , Convert.ToDateTime("2005-08-18"));


        }

    }


  

posted on 2008-05-07 00:02  默默無語中  阅读(177)  评论(0)    收藏  举报