委托概述

来源:互联网 发布:网络销售的聊天技巧 编辑:程序博客网 时间:2024/05/22 01:50

A、委托的定义及使用

委托时一种安全地封装方法的类型,是面向对象的、类型安全地和保险的。委托的类型由委托的名称定义。如下定义一个可以封装一个采用字符串作为参数并返回void的方法。

Public delegate void Del(String message);

实例化委托,委托方法给实例化的委托过程如下:

// 创建用于委托的的方法

public static void DelegateMethod(string message)

{

    System.Console.WriteLine(message);

}

 

 

// 实例化委托

Del handler = DelegateMethod;

 

// 调用实例化后的委托

handler("Hello World");

 

委托是一种类型(只不过该类型是由定位委托的名称确定的),故而其可作为参数进行传递。此外,虽然我们声明的委托不是直接派生自Delegate类,但我们可以使用其属性和方法等

int invocationCount = d1.GetInvocationList().GetLength(0);

 

 

    B、多路委托

 

可以将多个方法进行委托,这就是多路委托。其方法是运用加减运算符来增加某一委托实例的方法。

public class MethodClass

{

    public void Method1(string message) { }

    public void Method2(string message) { }

}

 

MethodClass obj = new MethodClass();

Del d1 = obj.Method1;

Del d2 = obj.Method2;

 

//Both types of assignment are valid.

Del allMethodsDelegate = d1 + d2;

 

 

   c、委托类型的比较

 

再有就是委托类型的比较。在编译时,对分配了两种不同类型的委托进行比较将产生编译错误。如果委托实例静态地属于类型system.Delegate,则允许进行比较,但在运行时将返回false。例如:

delegate void Delegate1();

delegate void Delegate2();

 

static void method(Delegate1 d, Delegate2 e, System.Delegate f)

{

    // Compile-time error.

    //Console.WriteLine(d == e);

 

    // OK at compile-time. False if the run-time type of f

    //is not the same as that of d.

    System.Console.WriteLine(d == f);

}

 

参见:

http://msdn.microsoft.com/zh-cn/library/ms173172(v=VS.80).aspx

 

原创粉丝点击