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发生。
分享到:
相关推荐
c#委托和事件简单示例
C# 事件委托简单封装示例,按照基本步骤实现对事件委托的一个简单封装。通常可封装在自定义控件,或者业务方法中
C#委托示例C#委托示例C#委托示例 委托和事件 委托和事件委托和事件
资源在于分享,技术在于交流。C# 委托和事件,简单示例说明问题,你也可以。技术不复杂,对您有参考意义就是我最大的贡献。
介绍C#中委托与事件的示例代码,阐述了委托和事件的密切联系,展现C#的迷人魅力。
C# 委托与事件 猫鼠问题示例。通过猫叫老鼠跑,来展示委托与事件。即通过传递把一个类的方法传递给另外一个类的事件(+=方式注册),在另外一个类中执行事件。
C#委托示例代码
自己学习C#时,练习委托的简单示例源码 演示委托的声明、用法;委托链的操作;委托作为参数传递给方法调用等。适合初学者!
C# 事件与委托
C# 委托方法原代码示例,方法简单,为初学者提供一个很好的示例代码.
对c#的委托和事件一直理解的不够透彻,这个资料能够全面详细的讲述了委托和事件。值得一读。与君共享
c# 多线程 委托 进度条示例 标准用法/简单易用/带注示
本人做的一个非常简单 C#委托的例子,很基础很简单的一个小例子,最最适合委托初学者参看。再结合资料,相信学通C#委托不是一件难事。 委托很好的解决了窗体之间的数据传递和方法调用,非常实用,通过这个例子相信能...
本文通过通俗的语言、图例和代码实例,描述了C#中委托的概念和使用方法
收集一些C#程序员面试题常见示例代码,主要有:不同元素上使用特性、动态发射程序集、多次申明同一特性、多事件类型、反射工厂模式的实现、反射类型的使用、链式委托的返回值、链式委托、句柄的使用和转换、简单程序...
C#委托实现在不同排序规则下数组的排序。
此文档有助于学习C#委托、事件和Observer设计模式。
该示例符合委托、事件的定义规则,并且可以帮助大家更好地理解委托和事件的使用! 先定义了一个名为MyEventArgs的类,继承自EventArgs,它包含一个Message属性,用于存储传递的消息。Publisher类中添加了一个...
C#语言有很多值得学习的地方,这里我们主要介绍C#委托实例,包括介绍重复调用 SimpleDelegate 的 MultiCall 方法等方面。 委托适用于那种在某些其他语言中需用函数指针来解决的情况(场合)。但是,与函数指针不同,...
C# HELLOW示例,YIELD示例,XML注释示例,不安全代码示例,OLEDB示例,版本控制示例,...集合示例,索引器示例,索引属性示例,用户定义的转换示例,泛型示例,显示接口示例,平台调用示例,分部类型示例,匿名委托示例,条件方法示例;