类库探源——System.Delegate

一、MSDN 描述

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

命名空间: System

程序集:   mscorlib.dll

说到 Delegate 就必须谈 MulticastDelagate

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

命名空间: System

程序集:   mscorlib.dll

继承关系:

备注:

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

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

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

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

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

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

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()
    {
    }
}

二、用 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. 基于事件的异步

未完

时间: 2024-10-29 19:08:38

类库探源——System.Delegate的相关文章

类库探源——System.String

一.MSDN描述 String 类: 表示文本,即一系列的 Unicode 字符 命名空间 : System 程序集 : mscorlib.dll 继承关系: 备注: 1. 字符串是 Unicode 字符的有序集合,用于表示文本.String 对象是 System.Char 对象的有序集合,用于表示字符串. 2. String 对象的值是该有序集合的内容,值不可变,所以String对象称为不可变的 string str1 = "3"+"b"; 这句话设计到1个Str

类库探源——System.Drawing.Bitmap

一.System.Drawing.Bitmap Bitmap 类: 封装GDI+ 位图,此位图由图形图像及其属性的像素数据组成.Bitmap 是用于处理由像素定义的图像的对象 命名空间: System.Drawing 程序集:   System.Drawing.dll 继承关系: 原型定义: [SerializableAttribute] [ComVisibleAttribute(true)] public sealed class Bitmap : Image 备注:GDI+ 支持下列文件格式

类库探源——System.Configuration 配置信息处理

按照MSDN描述 System.Configuration 命名空间 包含处理配置信息的类型 本篇文章主要两方面的内容 1. 如何使用ConfigurationManager 读取AppSetting和ConnectionStrings 2. 如何使用自定义 Section,我这里的自定义Section格式为 <SectionName> <services> 服务1的描述信息,供IoC容器使用 服务2的描述信息,供IoC容器使用 ... </services> <

类库探源——System.ValueType

一.MSDN描述 ValueType 类:提供值类型的基类 命名空间: System 程序集:   mscorlib.dll 继承关系: 值类型包括:字符.整数.浮点.布尔.枚举.结构(其实字符.整数.浮点.布尔是结构,下面会说明) 二.值类型花名册 1. 字符 Char 结构: 表示一个 Unicode 字符. 命名空间:   System 程序集   : mscorlib.dll 原型定义: [SerializableAttribute] [ComVisibleAttribute(true)

类库探源——System.Environment

Environment 类: 提供有关当前环境和平台的信息以及操作它们的方法.此类不能被继承. 命名空间: System 程序集:   mscorlib.dll 继承关系: 常用属性(字段)和方法: CurrentDirectory      获取或设置当前工作目录的完全限定路径 OSVersion             获取包含当前平台标识符和版本号的 OperatingSystem 对象. GetLogicalDrives      返回包含当前计算机中的逻辑驱动器名称的字符串数组. Ge

类库探源——System.Type

一.MSDN 描述 Type 类:表示类型声明:类类型.接口类型.数组类型.值类型.枚举类型.类型参数.泛型类型定义.以及开放或封闭构造的泛型类型. 命名空间: System 程序集:mscorlib.dll 继承关系: 从上面的继承关系能看出,Type和反射有关系,的确,引用MSDN上的话Type 为 System.Relection 功能的根也是访问元数组的主要方式. 二.获取 Type 的几种方式: 1. typeof 运算符 1 var type1 = typeof(TypeName);

类库探源——System.Drawing

一.System.Drawing 命名空间简述 System.Drawing 命名空间提供访问 GDI+ 的基本功能,更高级的功能在 System.Drawing.Drawing2D,System.Drawing.Imaging 和 System.Drawing.Text 命名空间 程序集: System.Drawing.dll 二.System.Drawing.Image 简述 Image 类:为源自 Bitmap 和 Metafile 的类提供功能的抽象基类 命名空间: System.Dra

类库探源——System.Math 和 Random

一.System.Math Math类:为三角函数.对数函数和其他通用数学函数提供常数和静态方法 命名空间: System 程序集 :   mscorlib.dll 继承关系: 常用属性: Math.E     表示自然对数的底(e) Math.PI    圆周率(π) 常用方法: Math.Abs(整数.浮点数)                绝对值 Math.Sin                                    正弦 Math.Cos                

关于委托:异常{ 无法将 匿名方法 转换为类型&ldquo;System.Delegate&rdquo;,因为它不是委托类型 }

异常{ 无法将 匿名方法 转换为类型"System.Delegate",因为它不是委托类型 } 委托实际上是把方法名作为参数,但是若有好多个方法时,就要指明是哪个参数  查看如下代码: this.Invoke(delegate                 {                     MessageBox.Show("t4");                 }); 熟悉winform的开发者都知道,this是一个窗体的实例,故不做另外解释.该代