码迷,mamicode.com
首页 > 其他好文 > 详细

类库探源——System.Delegate

时间:2014-12-10 17:42:56      阅读:137      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   io   ar   color   os   sp   strong   

一、MSDN 描述

Delegate 类:表示委托,委托是一种数据结构,它引用静态方法或引用类实例及该类的实例方法。(是不是感觉很像C语言中的函数指针 :) )

命名空间: System

程序集:   mscorlib.dll

 

说到 Delegate 就必须谈 MulticastDelagate

MulticastDelagate类 :表示多路广播委托;即,其调用列表中可以拥有多个元素的委托。

命名空间: System

程序集:   mscorlib.dll

 

继承关系:

bubuko.com,布布扣

 

备注:

1. Delegate 类是委托类型的基类

2. MulticastDelegate 继承自Delegate(这是废话,上面的继承关系那么明显)

3. MulticastDelegate 拥有一个带有链接的委托列表,该列表称为调用列表(虚函数表 Virtual Method Table)

4. 如果MulticastDelegate 的委托列表中某一个委托执行时发生异常,则在这个委托后面的委托不会执行

5. C# 中 delegate 与 Delegate 和 MulticastDelagate 的关系:

在C#中用 delegate 关键字标示一个方法 编译器将自动生成一个继承自 System.MulticastDelegate 的以方法名为类名的类,且添加 BeginInvoke 和 EndInvoke 方法

bubuko.com,布布扣
using System;

public delegate void CustomDelaget();    
// 用 delegate 关键字 编译器将自动生成一个继承自 System.MulticastDelegate 的类
/*
.class public auto ansi sealed CustomDelaget
       extends [mscorlib]System.MulticastDelegate
{
} // end of class CustomDelaget
*/
class App
{
    static void Main()
    {
        CustomDelaget d = new CustomDelaget(Invoke);
        d.Invoke();
    }
    
    static void Invoke()
    {
    }
}
View Code

bubuko.com,布布扣

 

 

二、用 Action 和 Func 代替自定义委托

Action 表示没有返回值的委托

Func 表示有返回值的委托

话说Action 和 Func 程序集分得有点怪异,Func 和 Action 程序集一样,以 Action 为例

Action(T) --> Action(T1,T2,T3,T4,T5,T6,T8) 的程序集为 mscorlib.dll

Action(T1,T2,T3,T4,T5,T6,T8,T9) -->  Action(T1,T2,T3,...,T16) 的程序集为 System.Core.dll

这给人最初设计折类库的人觉得最多8个参数就够了,后来发现8个参数又不够,又加了8个放在 System.Core.dll 下的感觉

 

三、异步

1. 基于委托的异步(传统异步)

 

 

2. 基于事件的异步

 

未完

类库探源——System.Delegate

标签:style   blog   http   io   ar   color   os   sp   strong   

原文地址:http://www.cnblogs.com/Aphasia/p/4155754.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!