using System;
public delegate void AgeChangeHandler(int age, object obj, ref bool b);class Test
{
              //在C#中可以用事件触发器声明对象吗?
    public event AgeChangeHandler AgeChange;
    int iAge;    public int Age
    {
        set
        {
            Boolean dontdoit = false;
            //这句话什么意思?
            AgeChange(value, this, ref dontdoit);
            if (!dontdoit)
                iAge = value;
        }
        get
        {
            return iAge;
        }
    }
    public Test()
    {
        iAge = 0;
    }
}class Test1
{
    //这个函数是普通函数?
    private static void MyAgeChangeHandler(int age, Object obj, ref bool dontdoit)
    {
        Console.WriteLine("age{0},obj.age = {1}", age, ((Test)obj).Age);
        if (age < 0 || age > 99)
            dontdoit = true;
    }
    public static void Main()
    {
        Test p = new Test();
        //为什么能用触发器new出对象,参数中给MyAgeChangeHandler什么意思?
        p.AgeChange += new AgeChangeHandler(MyAgeChangeHandler);
        p.Age = 21;
        p.Age = 33;        Console.ReadLine();
    }
}

解决方案 »

  1.   

    C#中的事件和委托关系密切问题,以你的code为例:
    AgeChangeHandler是委托, AgeChange是事件,通过
    p.AgeChange   +=   new   AgeChangeHandler(MyAgeChangeHandler); 
    这里的new不是创建对象,可以理解为建立联系,将p对象AgeChange事件的处理要委托给类以外的方法MyAgeChangeHandler。
      

  2.   

    1、AgeChange(value,   this,   ref   dontdoit); 
    当委托与方法关联时,调用关联的方法(实际上是方法指针)
    2、 private   static   void   MyAgeChangeHandler(int   age,   Object   obj,   ref   bool   dontdoit) 
            { 
                    Console.WriteLine( "age{0},obj.age   =   {1} ",   age,   ((Test)obj).Age); 
                    if   (age   <   0   ¦ ¦   age   >   99) 
                            dontdoit   =   true; 
            }         
    就是一个普通方法;
    3、 p.AgeChange   +=   new   AgeChangeHandler(MyAgeChangeHandler); 
    p.AgeChange相当于是一个指针链表,此处表示把MyAgeChangeHandler方法指针添加到链表中去
      

  3.   

    AgeChangeHandler 是委托
    AgeChange 是事件
    MyAgeChangeHandler 是方法
    Test1对象通过MyAgeChangeHandler方法将AgeChange事件委托给Test来处理哈哈:)可以这样来解释吧:)