请各位大侠指教C#中事件问题,小弟在线等!
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();
}
}
------解决方案--------------------C#中的事件和委托关系密切问题,以你的code为例:
AgeChangeHandler是委托, AgeChange是事件,通过
p.AgeChange += new AgeChangeHandler(MyAgeChangeHandler);
这里的new不是创建对象,可以理解为建立联系,将p对象AgeChange事件的处理要委托给类以外的方法MyAgeChangeHandler。
------解决方案--------------------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方法指针添加到链表中去
------解决方案--------------------AgeChangeHandler 是委托
AgeChange 是事件
MyAgeChangeHandler 是方法
Test1对象通过MyAgeChangeHandler方法将AgeChange事件委托给Test来处理
哈哈:)可以这样来解释吧:)