直接说是什么事情吧,谁敢说比较了解啊.如果是找文章,看看这篇,MSDN中的帮助也不错.
鄙人写了一篇自认为对.net framework"事件"理解比较透彻的C#代码分析,请各位高手指教一二
http://expert.csdn.net/Expert/TopicView3.asp?id=1169376

解决方案 »

  1.   

    第一个例子:using System;namespace EventUsage
    {
    delegate void ValueChangedHandler(object theobj); class ExampleA
    {
    private int v=0; public event ValueChangedHandler Changed; public int Value
    {
    get{return v;}
    set
    {
    if(value!=v)
    {
    v=value;
    if(Changed!=null)
    Changed(this);
    }
    }
    }
    }
    class App
    {
    [STAThread]
    static void Main(string[] args)
    {
    ExampleA a=new ExampleA();
    Console.WriteLine("Main:"+a.Value);
    a.Changed+=new ValueChangedHandler(WhenChanged);
    a.Value+=1;
    }
    static void WhenChanged(object obj)
    {
    Console.WriteLine("WhenChanged:"+((ExampleA)obj).Value);
    }
    }
    }
      

  2.   

    例子2:using System;namespace EventUsage
    {
    delegate void ValueChangedHandler(object theobj); class ExampleB
    {
    private int v=0; //private
    private event ValueChangedHandler prv_Changed;
    public event ValueChangedHandler Changed
    {
    add
    {
    prv_Changed+=value;
    }
    remove
    {
    prv_Changed-=value;
    }
    } public int Value
    {
    get{return v;}
    set
    {
    if(value!=v)
    {
    v=value;
    if(prv_Changed!=null)
    prv_Changed(this);
    }
    }
    }
    }
    class App
    {
    [STAThread]
    static void Main(string[] args)
    {
    ExampleB a=new ExampleB();
    Console.WriteLine("Main:"+a.Value);
    a.Changed+=new ValueChangedHandler(WhenChanged);
    a.Value+=1;
    }
    static void WhenChanged(object obj)
    {
    Console.WriteLine("WhenChanged:"+((ExampleB)obj).Value);
    }
    }
    }
      

  3.   

    例子三:没有办法帖下去了。.using System;namespace EventUsage
    {
    delegate void ValueChangedHandler(object theobj); class ExampleC
    {
    private int v=0; //private
    private event ValueChangedHandler prv_Changed;
    public event ValueChangedHandler Changed
    {
    add
    {
    prv_Changed+=value;
    }
    remove
    {
    prv_Changed-=value;
    }
    }
    virtual protected void OnChanged()
    {
    if(prv_Changed!=null)
    prv_Changed(this);
    } public int Value
    {
    get{return v;}
    set
    {
    if(value!=v)
    {
    v=value;
    OnChanged();
    }
    }
    }
    }
    class App
    {
    [STAThread]
    static void Main(string[] args)
    {
    ExampleC a=new ExampleC();
    Console.WriteLine("Main:"+a.Value);
    a.Changed+=new ValueChangedHandler(WhenChanged);
    a.Value+=1;
    }
    static void WhenChanged(object obj)
    {
    Console.WriteLine("WhenChanged:"+((ExampleC)obj).Value);
    }
    }
    }
      

  4.   

    例子4:using System;namespace EventUsage
    {
    delegate void ValueChangedHandler(object theobj); class  ClassA
    {
    private int v=0;
    public event ValueChangedHandler Changed;
    public int Value
    {
    get{return v;}
    set{
    if(value!=v)
    {
    v=value;
    if(Changed!=null)
    Changed(this);
    }
    }
    }
    }
    class ClassB
    {
    private ClassA a=new ClassA();
    private event ValueChangedHandler prv_Changed;
    public event ValueChangedHandler Changed
    {
    add
    {
    if(prv_Changed==null)
    a.Changed+=new ValueChangedHandler(WhenAChanged);
    prv_Changed+=value;
    }
    remove
    {
    prv_Changed-=value;
    if(prv_Changed==null)
    a.Changed-=new ValueChangedHandler(WhenAChanged);
    }
    }
    public int Value
    {
    get{return a.Value+100;}
    set{a.Value=value-100;}
    }
    private void WhenAChanged(object thea)
    {
    Console.WriteLine("WhenAChanged:"+a.Value);
    prv_Changed(this);
    }
    }

    class App
    {
    [STAThread]
    static void Main(string[] args)
    {
    ClassB b=new ClassB();
    b.Value++;
    Console.WriteLine("Main:"+b.Value);
    b.Changed+=new ValueChangedHandler(WhenChanged);
    b.Value++;
    }
    static void WhenChanged(object obj)
    {
    Console.WriteLine("WhenBChanged:"+((ClassB)obj).Value);
    }
    }
    }
      

  5.   

    例子5:using System;namespace EventUsage
    {
    delegate void ValueChangedHandler(object theobj); class  ClassA
    {
    private int v=0;
    public event ValueChangedHandler Changed;
    virtual public int Value
    {
    get{return v;}
    set{
    if(value!=v)
    {
    v=value;
    OnChanged();
    }
    }
    }
    virtual protected void OnChanged()
    {
    if(Changed!=null)
    Changed(this);
    }
    }
    class ClassB : ClassA
    {
    override public int Value
    {
    get{return base.Value+100;}
    set{base.Value=value-100;}
    }
    override protected void OnChanged()
    {
    Console.WriteLine("ClassBOnChanged:"+this.Value);
    base.OnChanged();
    }
    }

    class App
    {
    [STAThread]
    static void Main(string[] args)
    {
    ClassB b=new ClassB();
    b.Value++;
    Console.WriteLine("Main:"+b.Value);
    b.Changed+=new ValueChangedHandler(WhenChanged);
    b.Value++;
    }
    static void WhenChanged(object obj)
    {
    Console.WriteLine("WhenBChanged:"+((ClassB)obj).Value);
    }
    }
    }
      

  6.   

    例子6:(不写下去了。.)using System;namespace EventUsage
    {
    delegate void ValueChangedHandler(object theobj); class  ClassA
    {
    private int v=0;
    virtual public event ValueChangedHandler Changed;
    virtual public int Value
    {
    get{return v;}
    set{
    if(value!=v)
    {
    v=value;
    OnChanged();
    }
    }
    }
    virtual protected void OnChanged()
    {
    if(Changed!=null)
    Changed(this);
    }
    }
    class ClassB : ClassA
    {
    override public event ValueChangedHandler Changed
    {
    add
    {
    Console.WriteLine("Attached a Handler");
    base.Changed+=value;
    }
    remove
    {
    Console.WriteLine("Detached a Handler");
    base.Changed-=value;
    }
    }
    override public int Value
    {
    get{return base.Value+100;}
    set{base.Value=value-100;}
    }
    override protected void OnChanged()
    {
    Console.WriteLine("ClassBOnChanged:"+this.Value);
    base.OnChanged();
    }
    }

    class App
    {
    [STAThread]
    static void Main(string[] args)
    {
    ClassB b=new ClassB();
    b.Value++;
    Console.WriteLine("Main:"+b.Value);
    b.Changed+=new ValueChangedHandler(WhenChanged);
    b.Value++;
    b.Changed-=new ValueChangedHandler(WhenChanged);
    b.Value--;
    }
    static void WhenChanged(object obj)
    {
    Console.WriteLine("WhenBChanged:"+((ClassB)obj).Value);
    }
    }
    }