C#中的事件

类别:.NET开发 点击:0 评论:0 推荐:

/*    事件和异常相似,它们都由对象引发。但不同之处是,异常由try catch块处理,而事件需要有订阅它的主法(事件处理程序)来处理。
 *    而且这个函数必须匹配事件的要的求方法签名,这个签名由一个委托指定。
 * 事件由对象引发后 ,就开始执行它的处理程序。
*/
//下面看个例子
using System;
namespace me
{
 public delegate void ageHandler(int x);
 public class person
 {
  int age;
  public event ageHandler AgeAdd;//用定义好的委托来定义一个事件
  public person(int num)
  {
   age=num;
  }
  public person():this(0)
  {
  }
  public int Age
  {
   get
   {
    return age;
   }
   set
   {
    if(value>age)//当设定的年龄比现在年龄大时,触发事件
    {
     this.AgeAdd(value-age);//传给它的参数为增长的年龄
    }
    age=value;
   }
  }
 }
 public class class1
 {
  public static void Main(string[] args)
  {
   person p=new person(20);
   p.AgeAdd+=new ageHandler(p_AgeAdd);//为person对象p的AgeAdd事件添
   //程序,也就是方法p_AgeAdd
   p.Age=25;//触发事件
  }
  public static void p_AgeAdd(int x)//AgeAdd的事件处理程序
  {
   Console.WriteLine("增长了"+x+"岁");
  }
 }
}

 /*现在运行程序,会在控制台输出"增长了5岁"
  * 但 是我们应该发现,很多事件处理程序的参数如下:
  * private void button1_Click(object sender, System.EventArgs e)
  * 因为这个处理程序可能处理不止一个事件,所以sender表示了触发它的对象
  * e为由事件传送的参数
  * 下面我们再写一个程序
*/
using System;
namespace me
{
 //写一类,作用为我们事件传递的参数
 public class ageEventArgs:System.EventArgs
 {
  int oldage;
  int newage;
  public ageEventArgs(int a,int b)
  {
   oldage=a;
   newage=b;
  }
  public int OldAge
  {
   get
   {
    return oldage;
   }
  }
  public int NewAge
  {
   get
   {
    return  newage;
   }
  }
  public int AddAge
  {
   get
   {
    return newage-oldage;
   }
  }


 }


 //定义一个委托,第二个参数我们定义的类型
 public delegate void Agehandler(object sender,me.ageEventArgs e);
 
 public class person
 {
  public string name;
  int age;
  public event Agehandler AgeAdd;
  public person(int num,string n)
  {
   age=num;
   name=n;
  }
  public person():this(0,"no name")
  {
  }
  public int Age
  {
   get
   {
    return age;
   }
   set
   {
    if(value>age)
    {
     this.AgeAdd(this,new me.ageEventArgs(age,value));
    }
    age=value;
   }
  }

 }
 public class class1
 {
  static void Main(string[] args)
  {
   person p=new person(20,"人");
   p.AgeAdd+=new Agehandler(p_AgeAdd);
   p.Age=25;
  }
  static void p_AgeAdd(object sender,me.ageEventArgs e)
  {
   Console.WriteLine(((person)sender).name);
   Console.WriteLine(e.OldAge);
   Console.WriteLine(e.NewAge);
   Console.WriteLine(e.AddAge);

  }
 }
 
}
//到此,就简单的说明了C#中的事件的用法
 

 

本文地址:http://com.8s8s.com/it/it42621.htm