上一篇:用C#下的Raw Socket编程实现网络封包监视 >>
C#中的事件
* 而且这个函数必须匹配事件的要的求方法签名,这个签名由一个委托指定。
* 事件由对象引发后 ,就开始执行它的处理程序。
*/
//下面看个例子
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#中的事件的用法
下一篇:C#中的类型转换 >>
相关文章:
- · C#使用CDO发送邮件
- · 读《C#入门经典》
- · 【C#】整数类型的判断!
- · c#下重写BUTTON控件
- · 怎样在C#中调用Delphi6写的DLL
- · C#向Sql Server中插入记录时单引号的处理
- · 使用 Visual C# .NET 检查 Windows 版本
- · C#:获得文件版本信息及只读文件的删除
- · C#:文件的按行读/写及文件目录对话框的使用
- · 以实例说明如何使用C#从数据库中提取数据,按要求自动生成定制的Excel表格
- · C#:ListBox的2个常用方法Add,Clear与Items的2个属性
- · 用C#实现WEB浏览器
- · C#读写注册表
- · C#数据库连接字符大全
- · C#编码规范.doc
- · 用C#给程序加启动画面并只允许一个应用程序实例运行
- · 使用C#在进度条中显示复制文件的进度
- · 使用C#编写Ice应用程序
- · C#多线程共享数据
- · C#开发小技巧--对Text控件增量赋值的代码优化
- · C#实现Singleton的两种方法的比较
- · C#下的webservcie 实现代码和 在vc和python下的调用实现
- · VB中常用的数据类型和C#中数据类型的对应
- · [ASP.net(C#)]XML操作类(一)
- · 发表一个自己C#写的email 初级系统源代码
- · c#的开发环境
- · C# 1.x 实现 强类型元素唯一的 ArrayList
- · c# encrypt
- · C++编程人员容易犯的10个C#错误
- · c#中结构与类的区别
- · C# 编码规范和编程好习惯
- · (C#)数值型货币的大写转换
- · 用Visual C#实现局域网点对点通讯
- · 一段切换输入法的c#代码
- · 如何在C#中实现图片缩放
- · [ASP.NET]使用C#开发Socket通讯
- · Oracle数据库操作类(c#)
- · 在C#中使用代理的方式触发事件
