事件

作者在 2008-04-27 16:38:54 发布以下内容
using System;
class Publisher //出版商
{
 public delegate void Publish();//声明事件所要的代理
 public event Publish OnPublish;//声明一个事件
 public void issue() //触发事件
 {
  //判断是否有这一事件的触发代理
  if(OnPublish!=null) //事件是一个名词,而不是一个方法。
  {
   Console.WriteLine("发行杂志");
   OnPublish();
  }
 }
}
class Subscriber  //订阅者
{
 public void Received()
 {
  Console.WriteLine("收到杂志");
 }
}
class test
{
 static void Main()
 {
  Publisher a=new Publisher();
  Subscriber b=new Subscriber();
  a.OnPublish += new Publisher.Publish(b.Received);//添加事件
  a.issue();//触发事件
 }
}
C#基础 | 阅读 1543 次
文章评论,共2条
fanneysky(作者)
2008-04-29 19:25
1
using System;
class Publisher //出版商
{
    public delegate void PublishPc(string zazhi);
    public delegate void PublishLife(string zazhi);//声明事件所要的代理
    public event PublishPc OnPublishPc;//声明事件所要的代理
    public event PublishLife OnPublishLife;//声明一个事件
    public void issuePc() //触发事件
    {
        //判断是否有这一事件的触发代理
        if(OnPublishPc!=null) //事件是一个名词,而不是一个方法。
        {
            Console.WriteLine("发行电脑杂志");
            OnPublishPc("电脑杂志");
        }
    }
    public void issueLife() //触发事件
    {
        //判断是否有这一事件的触发代理
        if(OnPublishLife!=null) //事件是一个名词,而不是一个方法。
        {
            Console.WriteLine("发行生活杂志");
            OnPublishLife("生活杂志");//传入一个参数,因为定义委托中含一个参数。
        }
    }
}
class Subscriber  //订阅者
{
    private string name;
    public Subscriber(string Name)
    {
        this.name=Name;
    }
    public void Received(string zazhi)
    {
        Console.WriteLine(name+"收到"+zazhi);
    }
}
class test
{
    static void Main()
    {
        Publisher a=new Publisher();
        Subscriber zs=new Subscriber("张三");
        Subscriber ls=new Subscriber("李四");
        //调用事件的时候使用对象名称如:a.OnPublishPc
        //调用委托(因为是静态的)的时候使用类名称 如:Publisher.PublishePc
        a.OnPublishPc += new Publisher.PublishPc(zs.Received);//添加事件
        a.OnPublishPc += new Publisher.PublishPc(ls.Received);
        a.OnPublishLife += new Publisher.PublishLife(ls.Received);
        a.issuePc();//触发事件
        a.issueLife();
        a.OnPublishPc -=new  Publisher.PublishPc(zs.Received);
        a.issuePc();
        
    }
}
using System;
class Publisher //出版商
{
    public delegate void PublishPc(string zazhi);
    public delegate void PublishLife(string zazhi);//声明事件所要的代理
    public event PublishPc OnPublishPc;//声明事件所要的代理
    public event PublishLife OnPublishLife;//声明一个事件
    public void issuePc() //触发事件
    {
        //判断是否有这一事件的触发代理
        if(OnPublishPc!=null) //事件是一个名词,而不是一个方法。
        {
            Console.WriteLine("发行电脑杂志");
            OnPublishPc("电脑杂志");
        }
    }
    public void issueLife() //触发事件
    {
        //判断是否有这一事件的触发代理
        if(OnPublishLife!=null) //事件是一个名词,而不是一个方法。
        {
            Console.WriteLine("发行生活杂志");
            OnPublishLife("生活杂志");//传入一个参数,因为定义委托中含一个参数。
        }
    }
}
class Subscriber  //订阅者
{
    private string name;
    public Subscriber(string Name)
    {
        this.name=Name;
    }
    public void Received(string zazhi)
    {
        Console.WriteLine(name+"收到"+zazhi);
    }
}
class test
{
    static void Main()
    {
        Publisher a=new Publisher();
        Subscriber zs=new Subscriber("张三");
        Subscriber ls=new Subscriber("李四");
        //调用事件的时候使用对象名称如:a.OnPublishPc
        //调用委托(因为是静态的)的时候使用类名称 如:Publisher.PublishePc
        a.OnPublishPc += new Publisher.PublishPc(zs.Received);//添加事件
        a.OnPublishPc += new Publisher.PublishPc(ls.Received);
        a.OnPublishLife += new Publisher.PublishLife(ls.Received);
        a.issuePc();//触发事件
        a.issueLife();
        a.OnPublishPc -=new  Publisher.PublishPc(zs.Received);
        a.issuePc();
        
    }
}
fanneysky(作者)
2008-04-29 20:56
2
using System;
class PublishEventArgs : EventArgs
{
    private readonly string m_zazhi;
    private readonly DateTime m_date;
    public PublishEventArgs(string M_zazhi,DateTime M_date)
    {
        m_zazhi=M_zazhi;
        m_date=M_date;
    }
    public string M_zazhi
    {
        get { return m_zazhi; }
    }
    public DateTime M_date
    {
        get { return m_date; }
    }
}
class Publisher //出版商
{
    public delegate void PublishPcEventHandler(object sender,PublishEventArgs e);
    public delegate void PublishLifeEventHandler(object sender,PublishEventArgs e);
    public event PublishPcEventHandler PublishPc;
    public event PublishLifeEventHandler PublishLife;
    //visrtual允许子类重载
    protected virtual void OnPublishPc(PublishEventArgs e)
    {
        PublishPcEventHandler handler= PublishPc;  //声明一个临时的委托
        if(handler!=null)
            handler(this,e);
    }
    protected virtual void OnPublishLife(PublishEventArgs e)
    {
         //声明一个临时的委托,为防止存在相同的线程
        PublishLifeEventHandler handler= PublishLife; 
        if(handler!=null)
            handler(this,e);
    }
    public void issuePc(string zazhi,DateTime date)
    {
        Console.WriteLine("发行"+zazhi);
        OnPublishPc(new PublishEventArgs(zazhi,date));
    }
    public void issueLife(string m_zazhi,DateTime M_date)
    {
        Console.WriteLine("发行"+m_zazhi);
        //将(m_zazhi,M_date)值赋给类PublishEventArgs中
        OnPublishPc(new PublishEventArgs(m_zazhi,M_date));
    }
}

class Subscriber  //订阅者
{
    private string name;
    public Subscriber(string Name)
    {
        this.name=Name;
    }
    public void Received(object sender,PublishEventArgs e)
    {
        M_date+name,e.M_zazhi存在e中
        Console.WriteLine(e.M_date+name+"收到"+e.M_zazhi);
    }
}
class test
{
    static void Main()
    {
        Publisher a=new Publisher();
        Subscriber zs=new Subscriber("张三");
        Subscriber ls=new Subscriber("李四");
        //声明一个类的事件 += 一个委托
        a.PublishPc += new Publisher.PublishPcEventHandler(zs.Received);
        a.PublishPc += new Publisher.PublishPcEventHandler(ls.Received);
        a.PublishLife += new Publisher.PublishLifeEventHandler(ls.Received);
        a.issuePc("电脑杂志",Convert.ToDateTime("2008-4-28"));
        a.issueLife("生活杂志",Convert.ToDateTime("2008-4-29"));
        a.PublishPc -=new  Publisher.PublishPcEventHandler(zs.Received);
        a.issuePc("电脑杂志",Convert.ToDateTime("2008-5-5"));
        
    }
}
游客请输入验证码
浏览19882次