委托的使用全面剖析(委托好处,为什么要用委托,委托实例精解)
2007-04-11 23:19
387 查看
(1)了解委托的概念
c#中的委托像c/c++中的函数指针.一个多重委托可以订阅多个方法.一个委托可以在用来调用函数,具体调用哪个函数在运行的时候被确定.
什么是委托?为什么需要他们?
委托是c#中类型安全的,可以订阅一个或多个具有相同签名方法的
函数指针.委托在c#中是引用类型.委托的必须和所指向的方法具有相同的签名.
C#在System名字空间有个Delegate类,他提供了对委托的支持.委托有两种类型:单一委托和多重委托
单一委托只能订阅一个方法,而多重委托可以订阅多个具有相同签名的方法.
委托适用于那种在某些语言中需要用函数指针来解决的情况,但是与函数指针不同,它是面向对象和类型安全的。
委托声明定义一个类,它是从System.Delegate类派生的类。委托实例封装了一个调用列表,其中列出了一个或多个方法,每个方法称为一个可调用实体。对于实例方法,可调用实体由一个实例和该实例的方法组成;对于静态方法,可调用实体仅由一个方法组成。如果用一组合适的参数来调用一个委托实例,则该委托实例所封装的每个可调用实体都会被调用,并且使用上述同一组参数。
(2)想想使用委托什么时候显示其效果:
创建一个myDelegate实例,然后立即调用它。这样做并没有太大的意义,因为直接调用方法会更简单。
当涉及其匿名特性时,委托才能真正显示出其效果。
委托技术是.NET引入的一种重要技术,使用委托可以实现对象行为的动态绑定,从而提高设计的灵活性。
1、.NET中的委托技术
.NET运行库支持称为“委托”的引用类型,其作用类似于C++中的函数指针。与函数指针不同,委托实例独立于其封装方法的类,主要是那些方法与委托类型兼容。另外,函数指针只能引用静态函数,而委托可以引用静态和实例方法。委托主要用于.NET
Framework中的事件处理程序和回调函数。
定义和使用委托分为声明、实例化和调用3个步骤。委托用委托声明语法声明,如:
delegate void myDelegate( );
声明一个名为myDelegate的委托,它不带参数并且不返回任何结果,如:
class Test
{
static void F( )
{
System.Console.WriteLine (“Test.F”);
}
static void Main ( )
{
myeDelegate d = new myDelegate (F);
d ( );
}
}
创建一个myDelegate实例,然后立即调用它。这样做并没有太大的意义,因为直接调用方法会更简单。当涉及其匿名特性时,委托才能真正显示出其效果,如:
void MultiCall (myDelegate d, int count ) {
for (int I = 0; I < count; I++) {
d( );
}
}
显示一个重复调用 myDelegate的MultiCall
方法,这个方法不知道,也不必知道myDelegate的目标方法的类型、该方法具有的可访问性或者是否为静态。对它来说最重要的是目标方法与myDelegate兼容。
2、示例
下面的例子说明了委托的实现,代码如下:
1using System;
2namespace DelegateExample
3{
4 public class TemplateMethod
5 {
6
public delegate float Comp(float a,float b);
7
public Comp myComp;
8
public TemplateMethod()
9
{}
10
public float DoComp(float[] f)
11
{
12
float nf = float.NaN;
13
foreach(float df in f)
14
{
15
if(float.IsNaN(nf))
16
nf = df;
17
else
18
nf = myComp(nf,df);
19
}
20
return nf;
21
}
22
23 }
24}
c#中的委托像c/c++中的函数指针.一个多重委托可以订阅多个方法.一个委托可以在用来调用函数,具体调用哪个函数在运行的时候被确定.
什么是委托?为什么需要他们?
委托是c#中类型安全的,可以订阅一个或多个具有相同签名方法的
函数指针.委托在c#中是引用类型.委托的必须和所指向的方法具有相同的签名.
C#在System名字空间有个Delegate类,他提供了对委托的支持.委托有两种类型:单一委托和多重委托
单一委托只能订阅一个方法,而多重委托可以订阅多个具有相同签名的方法.
委托适用于那种在某些语言中需要用函数指针来解决的情况,但是与函数指针不同,它是面向对象和类型安全的。
委托声明定义一个类,它是从System.Delegate类派生的类。委托实例封装了一个调用列表,其中列出了一个或多个方法,每个方法称为一个可调用实体。对于实例方法,可调用实体由一个实例和该实例的方法组成;对于静态方法,可调用实体仅由一个方法组成。如果用一组合适的参数来调用一个委托实例,则该委托实例所封装的每个可调用实体都会被调用,并且使用上述同一组参数。
(2)想想使用委托什么时候显示其效果:
创建一个myDelegate实例,然后立即调用它。这样做并没有太大的意义,因为直接调用方法会更简单。
当涉及其匿名特性时,委托才能真正显示出其效果。
委托技术是.NET引入的一种重要技术,使用委托可以实现对象行为的动态绑定,从而提高设计的灵活性。
1、.NET中的委托技术
.NET运行库支持称为“委托”的引用类型,其作用类似于C++中的函数指针。与函数指针不同,委托实例独立于其封装方法的类,主要是那些方法与委托类型兼容。另外,函数指针只能引用静态函数,而委托可以引用静态和实例方法。委托主要用于.NET
Framework中的事件处理程序和回调函数。
定义和使用委托分为声明、实例化和调用3个步骤。委托用委托声明语法声明,如:
delegate void myDelegate( );
声明一个名为myDelegate的委托,它不带参数并且不返回任何结果,如:
class Test
{
static void F( )
{
System.Console.WriteLine (“Test.F”);
}
static void Main ( )
{
myeDelegate d = new myDelegate (F);
d ( );
}
}
创建一个myDelegate实例,然后立即调用它。这样做并没有太大的意义,因为直接调用方法会更简单。当涉及其匿名特性时,委托才能真正显示出其效果,如:
void MultiCall (myDelegate d, int count ) {
for (int I = 0; I < count; I++) {
d( );
}
}
显示一个重复调用 myDelegate的MultiCall
方法,这个方法不知道,也不必知道myDelegate的目标方法的类型、该方法具有的可访问性或者是否为静态。对它来说最重要的是目标方法与myDelegate兼容。
2、示例
下面的例子说明了委托的实现,代码如下:
1using System;
2namespace DelegateExample
3{
4 public class TemplateMethod
5 {
6
public delegate float Comp(float a,float b);
7
public Comp myComp;
8
public TemplateMethod()
9
{}
10
public float DoComp(float[] f)
11
{
12
float nf = float.NaN;
13
foreach(float df in f)
14
{
15
if(float.IsNaN(nf))
16
nf = df;
17
else
18
nf = myComp(nf,df);
19
}
20
return nf;
21
}
22
23 }
24}
相关文章推荐
- 委托的使用全面剖析(委托好处,为什么要用委托,委托实例精解)
- 为什么要使用委托
- 什么时候该用委托,为什么要用委托,委托有什么好处
- OpenStack系列讲座3:OpenStack详细解读(定义,好处与使用实例)
- 使用委托参数的实例
- Castle实践9-在Castle IOC容器中使用AspectSharp(全面剖析AspectSharp Facility)
- 为什么需要消息队列,及使用消息队列的好处?
- 实例浅析epoll的水平触发和边缘触发,以及边缘触发为什么要使用非阻塞IO
- C#多线程 使用委托更新UI实例(WP7开发 其他线程中更新UI)(转载)
- JAVA: 为什么要使用"抽象类"? 使用"抽象类"有什么好处?
- 跟着实例学习java多线程1-为什么使用?
- 使用类前置声明的好处-结合Qt 4一个主窗口实例讲解
- 为什么要使用委托?
- spring框架的好处,为什么使用它?
- spring框架的好处,为什么使用它?
- JAVA: 为什么要使用"抽象类"? 使用"抽象类"有什么好处?
- 实例浅析epoll的水平触发和边缘触发,以及边缘触发为什么要使用非阻塞IO
- JAVA: 为什么要使用"抽象类"? 使用"抽象类"有什么好处?
- 深入理解 c# 第五章 使用多个委托来捕获多个变量实例
- 为什么要使用事件而不是委托变量?