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#中的委托和事件,并通过一个简单的示例进行演示。 ### 1. 委托(Delegates) **概念**:委托在C#中相当于一种类型安全的函数指针,它可以引用一个或多个方法。委托可以作为参数传递给方法,也可以...
在C#编程中,事件和委托是核心特性之一,它们为构建可扩展和灵活的代码提供了基础。事件委托的封装是提高代码复用性和模块化的重要手段。本示例将探讨如何在C#中实现事件委托的简单封装,并提供一个实际的应用场景。...
下面是一个简单的委托示例: ```csharp public delegate void MyDelegate(string message); class Program { static void Main() { MyDelegate myDel = new MyDelegate(ShowMessage); myDel("你好,世界!"); ...
下面是一个简单的委托示例: ```csharp delegate void MyDelegate(string message); class Program { static void Main() { MyDelegate myDel = new MyDelegate(WriteMessage); myDel += WriteMessage2; myDel...
委托(Delegate)和事件(Event)是C#中非常重要的两种机制,它们在.NET框架中扮演着极其重要的角色。理解这两种概念,对于深入学习C#编程语言,构建高效、可维护的程序架构至关重要。首先我们来探讨一下委托的概念...
在面向对象编程语言C#中,委托(Delegate)和事件(Event)是两个重要的概念。本文将深入探讨这两者之间的关系及其在实际开发中的应用。 #### 二、委托(Delegate) 1. **定义**: - 委托在C#中类似于C++中的函数...
在C#编程中,委托、线程和事件是三个核心概念,它们对于构建高效、响应式的多任务应用程序至关重要。下面将详细阐述这三个概念及其相互之间的关系,并通过一个实例代码进行说明。 1. 委托(Delegate): 委托在C#中...
在C#编程语言中,委托和事件是两个非常重要的概念,它们构成了事件驱动编程的基础。...在实际项目中,结合文档《C#委托与事件.doc》的详细分析,初学者将更好地掌握这些概念,并能够在实践中得心应手。
在C#编程语言中,委托和事件是两个非常重要的概念,它们构成了.NET框架中的多线程和异步处理的核心机制。下面将详细解释这两个概念,并结合“鸿门宴”的应用场景,帮助你深入理解它们的工作原理。 **委托** 委托在...
### C#委托及事件委托的理解 #### 一、委托的基础概念 在C#中,委托是一种类型,它允许我们封装方法引用。通过这种方式,可以在不同的上下文中调用这些方法,而无需硬编码调用的位置。这类似于C++中的函数指针,但...
在C#编程语言中,委托和事件是两个关键的概念,它们是实现面向对象设计模式,尤其是事件驱动编程的核心。本文将深入探讨这两个概念,并提供相关的示例和应用场景,以帮助你更好地理解和应用。 首先,我们来了解**...
在C#编程语言中,委托和事件是两个重要的特性,它们是...在“猫鼠问题”示例中,我们看到了如何通过委托和事件来模拟现实世界中的交互,这只是一个简单的应用,实际上,委托和事件在复杂的应用程序中发挥着更大的作用。
在C#编程语言中,委托和事件是两个关键的概念,它们是实现回调函数和发布/订阅模式的基础。本文将深入探讨这两个概念,并通过实例来帮助理解它们的工作原理。 首先,让我们了解一下**委托**。委托在C#中可以看作是...
C#是一种面向对象的编程语言,它引入了委托和事件的概念,这两个概念是构建现代、反应式和异步应用程序的关键组件。本文将深入探讨C#中的委托与事件,并通过实例来帮助理解它们的工作原理和使用场景。 首先,我们来...
在这个简单的示例源码中,我们将深入探讨委托的概念,以及如何在C#中使用它们。对于初学者来说,理解委托是掌握面向对象编程的关键步骤之一。 首先,让我们来理解什么是委托。在C#中,委托是一种引用类型,它能引用...
本文将深入探讨C#中的委托和事件的概念及其应用,并通过具体示例来帮助理解这些核心概念。 #### 二、委托的基本概念 ##### 2.1 委托定义 - **委托**是一种引用类型的数据结构,它用来封装方法的引用。 - 它可以...
在提供的"DelegateEvent"压缩包文件中,可能包含了各种使用C#事件和委托的博客示例源码,你可以通过阅读和运行这些代码来进一步理解和实践这些概念。通过熟练掌握事件和委托,你将能够编写出更加灵活和可维护的C#...
`C#中的委托和事件.pdf`文档可能提供了更深入的理论解释和示例代码。 通过学习和实践这些例子,你可以更好地理解C#中的委托和事件如何工作,以及如何在实际项目中有效地使用它们。掌握这两个概念对于编写高效、健壮...