将方法作为参数传递给另外一个方法,就必须把方法的细节封装在一种新的类型的对象中,即委托。委托只是一种特殊的对象类型,其特殊之处在于,我们之前定义的所有对象基本都包括数据,而委托包含的只有方法的地址。
在C#中使用一个类时,分为2个阶段。首先要定义这个类,即告诉编译器这个类由什么字段和方法组成。然后(除非使用静态方法)实例化类的一个对象。使用委托时,也需要这2个步骤。首先定义要使用的委托,对于委托,定义它就是要告诉编译器这种类型的委托代表了哪种类型的方法,然后创建该委托的一个或者多个实例。编译器在后台将创建表示该委托的一个类。
定义委托的语法如下:
delegate void IntMethodInvoker(int x);
在这个实例中,定义了一个委托IntMethodInvoker,并指定该委托的每个实例都包含一个方法的细节,该方法带有一个int参数,并返回void。理解委托的一个要点是他们的类型是安全性非常高。在定义委托时必须给出它代表的方法签名和返回类型等全部细节。理解委托的一种好方式就是把委托当做给方法签名和返回类型指定名称。
因为定义委托基本上是定义一个新类,所以可以在定义类的任何地方定义委托,既可以在另外一个类的内部定义,也可以在任何类的外部定义,还可以在命名空间中把委托定义为顶层对象。可以在委托定义上田间一般的访问修饰符:public, private,protected等。
实际上,定义一个委托是指定义一个新类。委托实现为派生自基类System.MulticastDelegate的类。System.MulticastDelegate又派生自基类System.Delegate。C#编译器知道这个类,会使用其委托语法,因此我们不需要了解这个类的具体执行情况,这是C#与基类共同合作,是编程更容易完成的另一个实例。并且在术语方面。类有2个不同的术语:“类”表示较广义的定义,“对象”表示类的实例。但是委托只有一个术语,在创建委托的实例时,所创建的委托的实例仍称为委托,必须从上下文中确定委托的确切含义。
在C#中,委托在语法上总是带有一个参数的构造函数。这个参数就是委托引用的方法。这个方法必须匹配最初定义委托时的签名。如:
private delegate string GetAString();
static void Main(){
int x=80;
GetAString firstmethod = new GetAString (x.ToString); //不能是x.ToString(),要是这样就会返回一个字符串,而不是方法的引用
Console.WriteLine("String is {0}", firstmethod());
}
分享到:
相关推荐
### C#中的委托和事件 #### 一、委托的基础概念 在C#中,委托是一种引用类型的...事件和委托机制极大地简化了事件处理过程,使得程序设计更加灵活和模块化。希望本文能够帮助大家更好地理解和掌握C#中的事件编程。
在Windows Forms(Winform)开发中,委托和事件是两个重要的概念,它们为对象间的通信提供了强大而灵活的机制。本文将深入探讨这两个概念,并通过一个经典的子父窗口互传值的例子来阐述它们的使用。 首先,让我们...
总的来说,委托和事件是C#中实现回调和异步编程的关键工具,它们使得代码更加灵活,能够更好地响应外部事件和用户交互。理解和熟练使用委托和事件对于开发高效、可维护的.NET应用程序至关重要。在实际编程中,它们常...
在.NET Framework中,C#的委托和事件是两种强大的特性,它们在构建可复用、模块化和响应式代码方面发挥着关键作用。首先,让我们深入理解委托。 委托在C#中可以被视为一种类型,它封装了对方法的引用。简单来说,...
在异步编程中,`async/await`关键字配合事件和委托,可以实现非阻塞的IO操作。 总的来说,C#中的委托和事件是构建可扩展和响应式应用的核心工具。通过理解并熟练掌握它们,开发者可以编写出更加灵活和健壮的代码。...
### C#中的委托和事件详解 #### 一、引言 在C#编程语言中,委托和事件是非常重要的概念,它们被广泛应用于多种场景中,尤其是对于事件驱动的应用程序而言,掌握委托和事件的使用是必不可少的技能。本文将深入探讨...
详细讲述了C#中委托和事件的语法及其使用方法,用程序例子深入浅出的讲述了不同的使用方法和这些使用方法的优劣。
在IT领域,委托和事件是.NET框架中两个重要的概念,它们在实现对象间通信、响应特定操作或状态改变时扮演着关键角色。本文将通过一个详细的示例来深入理解委托和事件的工作机制。 ### 委托:桥梁作用 #### 定义与...
在C++编程中,模拟C#中的委托和事件机制是一项挑战,因为C++标准库并不直接支持这样的概念。然而,通过使用`std::function`和`std::bind`,我们可以实现类似的功能。以下是对这两个关键工具的详细解释,以及如何用...
事件和委托是实现观察者模式的一种方式。 在上面的例子中,`Greeter`类作为主题(Subject),`GreetingEvent`作为主题发布的一个事件。`EnglishGreeting`和`ChineseGreeting`方法作为观察者(Observer),它们通过订阅...
委托和事件是C#编程语言中非常重要的两个概念,它们是.NET框架中实现解耦合、异步编程以及观察者设计模式的基础。委托(Delegate)是一种特殊的数据类型,用于封装一个方法的引用。在C#中,委托声明了可以被调用的...
在C#编程语言中,委托和事件是两个非常重要的概念,它们构成了.NET框架中的多线程和异步处理的核心机制。下面将详细解释这两个概念,并结合“鸿门宴”的应用场景,帮助你深入理解它们的工作原理。 **委托** 委托在...
委托 和 事件在 .Net Framework中的应用非常广泛,然而,较好地理解委托和事件对很多接触C#时间不长的人来说并不容易。它们就像是一道槛儿,过了这个槛的人,觉得真是太容易了,而没有过去的人每次见到委托和事件就...
委托(Delegate)和事件(Event)是C#中非常重要的两种机制,它们在.NET框架中扮演着极其重要的角色。理解这两种概念,对于深入学习C#编程语言,构建高效、可维护的程序架构至关重要。首先我们来探讨一下委托的概念...
C# 讲解委托和事件的好文章集合。 包括: C#_委托的妙文.doc C#委托和事件.doc C#_委托使用方法.doc C#_WndProc的使用方法.doc 文档内有详细代码,您一定可以用它学会委托和事件!
通过使用.NET框架提供的标准委托和事件类型,可以简化事件处理过程,并提高代码的可读性和可维护性。 #### 2.5 委托进阶 ##### 2.5.1 为什么委托定义的返回值通常都为void? 委托定义的返回值通常设置为`void`的...