委托的简介(Delegate)

在.NET Framework中,委托是一种数据结构,它引用静态方法或者引用类实例该类的实例方法。
委托是委托类型的实例。只有当方法的签名与委托类型所指定的签名完全匹配时,委托才能引用方法。当委托引用实例方法时,委托储存对该方法入口点的引用及对称为目标的对象的引用,该对象是对其待用该方法的类的实例。实例方法的目标不能为空引用。当委托引用静态方法时,委托储存对该方法入口点的引用。静态方法的目标为空引用。

声明委托方法如下
public delegate void ProcessBookDelegate(book book);

声明一个新的委托类型时,每个委托类型都描述参数的数目和类型,以及它可以封装的方法的返回值类型。每当需要一组新的参数类型或新的返回值类型时,都必须声明一个新的委托类型。

实例化委托即在声明了委托类型后,必须创建委托对象并使之与特定方法关联。与所有其它对象类似,新的委托对象用NEW表达式创建,一旦创建了委托,它所关联到的方法便永不改变。

调用委托即在委托对象后,通常将委托对象传输给讲调用该委托的其他代码。通过委托对象的名称(后面跟着要传递给委托的参数,扩在括号内)调用委托对象。

下面有一个例子:

首先声明一个DelegateFeedBack类
public class DelegateFeedBack
{
    public DelegateFeedBack()
    {
        //
        // TODO: 在此处添加构造函数逻辑
        //


    }
    public string PrintString(int intValue)
    {
        if (intValue > 0)
        {
            return "这是一个正数";
        }
        if (intValue < 0)
        {
            return "这是一个负数";
        }
        return "这是一个零";
    }
    public string PrintUpDown(int intValue)
    {
        if (intValue > 0)
        {
            return intValue.ToString() + ">0";
        }
        if (intValue < 0)
        {
            return intValue.ToString() + "<0";
        }
        return intValue.ToString() + "=0";
    }
}

在页面中首先定义一个委托DelegatePring,携带一个×××参数
public delegate string DelegatePrint(int intValue);
接着在Page_Load里调用委托
 protected void Page_Load(object sender, EventArgs e)
    {
        DelegateFeedBack myDlegate = new DelegateFeedBack();
        DelegatePrint printString = new DelegatePrint(myDlegate.PrintString);
        DelegatePrint printletter = new DelegatePrint(myDlegate.PrintUpDown);
        Response.Write(printString(10)+"<br>");
        Response.Write(printletter(-100) + "<br>");
        
    }

转载于:https://blog.51cto.com/443065/91162

委托的定义,与简单使用相关推荐

  1. UE4 委托(代理)简单理解

    资料来源于: UE4官方文档 UE4 C++ -- 代理 UE4中的代理(Delegate)使用总结 (UE4 4.20)UE4的委托(Delegate)使用 什么是委托Delegates (网上大部 ...

  2. mysql 管理instance_对于多instance安装的MYSQL来说,起停的过程相对复杂,可以定义一些简单的脚本来简化日常的管理。1# 环境变量脚本[mysql@mysql01 scri...

    对于多instance安装的MYSQL来说,起停的过程相对复杂,可以定义一些简单的脚本来简化日常的管理. 1# 环境变量脚本 [mysql@mysql01 scripts]$ cat mysql_en ...

  3. 数据结构之队列的定义与简单实现

    队列的定义与简单实现 和栈相反,队列是一种先进先出(FIFO)的线性表,队列仅在线性表的两端进行操作: 1.队头(Front):取出数据元素的一端: 2.队尾(Rear):插入数据元素的一端. 现实中 ...

  4. 实验3.2 定义一个简单的Computer类

    题目 定义一个简单的Computer类,有数据成员芯片(cpu).内存(ram).光驱(cdrom)等等,有两个公有成员函数run.stop.cpu为CPU类的一个对象,ram为RAM类的一个对象,c ...

  5. 数据库实验之《数据定义与简单查询》

    Mysql数据定义与简单查询 博客由来 实验目的 实验内容 查询练习 寄语 完整源码 博客由来 本人在校学生,希望能借助平台记录下自己的成长,同时也希望分享自己的一些独特的想法.本次上机使用的平台:W ...

  6. C#委托的定义 以及使用方式详解,更简单的理解委托。

    委托的声明及定义: 委托是一个类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递,这种将方法动态地赋给参数的做法,可以避免在程序中大量使用If-Else(Switch)语句,同时使得 ...

  7. rj45接口引脚定义_简单修复数控主机网络接口通讯故障

    中国电路板维修人关注平台:技术分享.学习交流.案例视频.行业招聘资讯 [案例:某品牌数控主机网络接口无法通讯故障维修] 故障现象:网络接口无法使用,IP地址为192.168.1.101 解决方法: 此 ...

  8. PCI-E的针脚定义的简单讲解(备忘)

    PCI-E是什么呢? 简而言之,PCI-E是英特尔在2001年提出的一种取代以前的PCI.AGP的计算机内部互联总线标准.特点是串行(以前的ISA.PCI.AGP等都是并行的),并且支持1到32条通道 ...

  9. C语言详解系列——函数的认识(4)函数的声明与定义,简单练习题

    文章目录 函数的声明与定义 函数的声明 函数的定义 简单的练习题 写一个函数可以判断一个数是不是素数 写一个函数实现二分查找 写一个函数,每调用一次这个函数,就会将 num 的值增加1. 函数的声明与 ...

  10. c++定义一个简单的银行账户类

    用c++来定义一个简单的银行类: //编程实例:BankAccount类(简单版本)#include <iostream> using namespace std;//定义银行账户的类: ...

最新文章

  1. Android列表控件选项中添加进度框ProgressBar实现
  2. 【Java Web开发指南】AjaxJson笔记
  3. POJ1486模拟或者匈牙利变种
  4. javascript设计模式之观察者模式
  5. python封装方法有几种_Python打包exe文件方法汇总【4种】
  6. Mac上最好的Markdown文本编辑器_编辑工具
  7. 【离散数学】含有两个量词的谓词逻辑公式
  8. Java实训项目6:GUI学生信息管理系统 - 实现步骤 - 创建项目
  9. 排列组合算法之一: 01转换法_java改变后的c++版
  10. Python Cookbook(第3版)pdf
  11. php tp3.2 去重方法,thinkPHP框架整合tcpdf插件操作示例
  12. 【例】系统顺序图、操作契约、领域模型图
  13. c语言常用的100个程序,100个经典C语言程序,大家可以进来看看。
  14. 梦幻西游五虎将访谈系列:主策划小白
  15. 130、总结:华为、H3C、锐捷三家交换机配置命令详解
  16. android 火车购票功能,12306 火车票订票
  17. antv L7地图 绘制大小不受控制bug
  18. php编写程序制作图形验证码,php实现图形验证码详解!
  19. go基础知识学习笔记-篇幅很长写的我想吐
  20. 2013上半年,Google Chrome正式版最新版本,又增加什么小功能!

热门文章

  1. 六石管理学:新增一类产品问题,面子类问题
  2. configure: error: udev support requested but libudev header not installed
  3. 关于蜂蜜牛奶供养佛菩萨的两段经文
  4. 可能确实存在脂肪味觉(隐式味觉)
  5. 解决UBUNTU NVIDIA驱动安装后循环登录问题:关闭UEFI Secure Boot选项
  6. android 关闭jack_安卓编译 Jack server 错误问题解决办法
  7. android go 测试,从Gradle在Android中进行JUnit测试:“程序包android.test不存在”
  8. linux内核登录不上,在嵌入式板上启动linux内核后,用root登录不了
  9. C# NPOI NPOI加载 Excel加载 Excel读取 Excel写入 Excel修改 保证完整能用
  10. c++ 深度拷贝和浅度拷贝