`
wsql
  • 浏览: 11802787 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

C#委托-小结

 
阅读更多

委托包含对方法(不是方法名)的引用。使用委托可以在运行时决定调用哪个方法,甚至可以不用知道方法名就可以调用方法(因为我们是使用委托的对象来进行执行方法),执行(或调用)委托实际上将执行该委托所引用的方法。

委托将一个委托对象与所指定的方法联系起来,该方法的实现就可以与该委托对象联系起来,这样该委托对象就可以调用那个特定的方法。但是,委托要求方法和委托的定义具有相同的方法签名(即两者都要接受相同个数和类型的参数),并返回相同类型的参数。

注:被委托的方法的返回类型和参数列表相同(即参数类型和个数必须相同);委托有点类似于带参数的类声明,可以声明委托的对象,并用被委托的方法作为参数实例化这个对象。

可以把委托看作一个通用的方法名,该名称可以在不同的时刻指向不同的方法,并且可以通过该委托执行这些方法。

例子:
using System;

class TestDelegates
{
// 定义委托
public delegate int dgtCallFun(int param1, int param2);
class MathsOperations
{
// 方法的定义,注意与委托定义的参数列表相同
public int addFun(int a, int b)
{
return a + b;
}

// 方法的定义,注意与委托定义的参数列表相同
public int MulFun(int a, int b)
{
return a * b;
}
}
class test
{
static void Main(string[]args)
{
//声明一个委托的对象
dgtCallFun dgtObj;
MathsOperations maths = new MathsOperations();

// 用maths对象的addFun方法作为参数来实例化委托对象。
// addFun方法的定义与委托的定义参数相同
dgtObj = new dgtCallFun(maths.addFun);
// 调用委托,也即是执行被委托的方法
int b = dgtObj(5, 6);
Console.WriteLine("方法addFun委托后执行的结果是:{0}", b);
// 改变委托对象所指向的方法
dgtObj = new dgtCallFun(maths.MulFun);

// 再次调用委托,注意与前一次调用方式完全一致。
b = dgtObj(5, 6);
Console.WriteLine("方法MulFun委托后执行的结果是:{0}", b);
Console.Read();
}
}
}

总结:

使用委托涉及的步骤是:一定义委托,二带方法为参数来实例化委托,三执行委托。

委托是一个可以对方法进行引用的类。与其他的类不同,委托类具有一个签名,并且它只能对与其签名匹配的方法进行引用。这样,委托就等效于一个类型安全函数指针或一个回调。

分享到:
评论

相关推荐

    c#做的小程序 给大家分享

     小结 第2章 界面编程  实例22 Hello Form  实例23 主菜单  实例24 上下文菜单  实例25 工具栏  实例26 状态栏  实例27 进度条  实例28 滑块控件  实例29 单选框和复选框  实例30 列表框和组合...

    Visual C# 2010程序设计教程(教程PPT+源代码)

    1.4 本章小结 1.5 习题 第2章 Visual C# 2010语法基础 2.1 C#语言概述 2.2 C#基础元素 2.2.1 语句 2.2.2 标识符与关键字 2.3 变量 2.3.1 变量的命名 2.3.2 变量的声明和赋值 2.4 数据类型 2.4.1 简单类型 2.4.2 ...

    轻松学C#(图解版)

    1.4 小结 11 1.5 习题 12 第二篇 面向对象基础篇 第2章 类和对象 16 2.1 分析Hello World程序 16 2.2 语法规范 17 2.2.1 标识符 17 2.2.2 关键字 18 2.2.3 注释 19 2.3 定义类 20 2.4 实例化对象 20 2.5 小结 20 ...

    C#5.0本质论第四版(因文件较大传的是百度网盘地址)

    1.4 小结 20 第2章 数据类型 21 2.1 基本数值类型 21 2.1.1 整数类型 22 2.1.2 浮点类型 23 2.1.3 decimal类型 23 2.1.4 字面值 24 2.2 更多基本类型 27 2.2.1 布尔类型 27 2.2.2...

    Visual C#.NET程序设计(含书籍和源码) 李兰友 杨晓光 清华出版社,北交出版社

    本章小结 习题 第2章 C#语言基础 2.1 数据类型 2.2 表达式 2.3 程序控制语句 本章小结 习题 第3章 C#.NET面向对象程序设计 3.1 类 3.2 接口 3.3 委托与事件 3.4 编译和调试 本章小结 习题 第4章 常用Windows窗体控件...

    C#高级编程知识点总结

    针对C#高级编程考试重点复习用的文档第1章 .NET体系结构内容小结第2章 托管执行环境的介绍第3章 使用组件第4章 部署与版本控制第5章 对象和类型第7章 数组和集合第8章 委托和事件第9章 内存管理第10章 文件与I/O流...

    C#与.NET3.5高级程序设计(第4版) 中文1

    1.14 小结 26 第2章 构建C#应用程序 27 2.1 NET Framework 3.5 SDK的作用 27 2.2 用csc.exe构建C#应用程序 28 2.3 使用TextPad构建.NET应用程序 32 2.4 使用Notepad++构建.NET应用程序 35 2.5 使用...

    C#面向对象程序设计案例教程

    1.5 本章小结 1.6 习题 第2章 C#语法基础 2.1 C#语言的数据类型 2.1.1 案例说明 2.1.2 代码及分析 2.1.3 相关知识及滓意事项 2.2 C#语言的运算符和表达式 2.2.1 案例说明 2.2.2 代码及分析 2.2.3 相关...

    C#本质论(第3版)

    1.9 小结 第2章 数据类型 2.1 基本数值类型 2.1.1 整数类型 2.1.2 浮点类型 2.1.3 decimal类型 2.1.4 字面值 2.2 更多基本类型 2.2.1 布尔类型 2.2.2 字符类型 2.2.3 字符串 2.3 null和void 2.3.1 null...

    Visual C#.NET编程精粹150例.rar

     小结 第2章 界面编程  实例22 Hello Form  实例23 主菜单  实例24 上下文菜单  实例25 工具栏  实例26 状态栏  实例27 进度条  实例28 滑块控件  实例29 单选框和复选框  实例30 列表框和组合...

    LINQ 实战 1/11

    1.7 小结 30 第2章 C#和VB语言的增强特性 31 2.1 新语言的增强特性一瞥 31 2.1.1 列出当前正在运行的所有进程 32 2.1.2 将返回结果封装成类 33 2.2 隐式类型局部变量 34 2.2.1 语法 35 2.2.2 使用...

Global site tag (gtag.js) - Google Analytics