C#事件机制归纳(上)
2024-07-21 02:19:34
供稿:网友
1.委派的实现过程。
首先来看一下委派,委派其实就是方法的传递,并不定义方法的实现。事件其实就是标准化了的委派,为了事件处理过程特制的、稍微专业化一点的组播委派(多点委派)。下面举一个例子,我觉得把委派的例子和事件的例子比较,会比较容易理解。
using system;
class class1
{
delegate int mathop(int i1,int i2);
static void main(string[] args)
{
mathop op1=new mathop(add);
mathop op2=new mathop(multiply);
console.writeline(op1(100,200));
console.writeline(op2(100,200));
console.readline();
}
public static int add(int i1,int i2)
{
return i1+i2;
}
public static int multiply(int i1,int i2)
{
return i1*i2;
}
}
首先代码定义了一个委托mathop,其签名匹配与两个函数add()和multiply()的签名(也就是其带的参数类型数量相同):
delegate int mathop(int i1,int i2);
main()中代码首先使用新的委托类型声明一个变量,并且初始化委托变量.注意,声明时的参数只要使用委托传递的函数的函数名,而不加括号:
mathop op1=new mathop(add);
(或为mathop op1=new mathop(multiply);)
委托传递的函数的函数体:
public static int add(int i1,int i2)
{
return i1+i2;
}
public static int multiply(int i1,int i2)
{
return i1*i2;
}
然后把委托变量看作是一个函数名,将参数传递给函数。 console.writeline(op1(100,200));
console.writeline(op2(100,200));
2.事件的实现过程
using system;
class class1
{
static void main(string[] args)
{
student s1=new student();
student s2=new student();
s1.registerok +=new student.delegateregisterokevent(student_registerok);
s2.registerok +=new student.delegateregisterokevent(student_registerok);
s1.register();
s2.register();
console.readline();
}
static void student_registerok()
{
console.writeline("hello");
}
}
class student
{
public delegate void delegateregisterokevent();
public event delegateregisterokevent registerok;
public string name;
public void register()
{
console.writeline("register method");
registerok();
}
}
在student类中,先声明了委托delegateregisterokevent(),然后使用event和要使用的委托类型(前面定义的delegateregisterokevent委托类型)声明事件registerok(可以看作是委托的一个实例。):
public delegate void delegateregisterokevent();
public event delegateregisterokevent registerok;
然后在main()函数中,实例化student类,然后s1.registerok事件委托给了student_registerok 方法。通过“+=”(加等于)操作符非常容易地为.net对象中的一个事件添加一个甚至多个响应方法;还可以通过非常简单的“-=”(减等于)操作符取消这些响应方法。
然后,当调用s1.register()时,事件s1.registerok发生。