using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{

/// <summary>
    /// 委托是一类继承自 System.Delegate 的类型,每个委托对象至少包含一个指向某个方法的指针,该方法可以是实例方法,也可以是静态方法,委托实现了回调放方式的机制,能够帮助程序员设计简洁优美的面向对象程序。
    /// System.Object
    /// system.Delegate - ISerilizable
    ///                 - ICloneable
    ///syatem.MulticastDelegate
    ///
    ///
    ///
    /// 委托回静态方法和实力方法的区别
    ///
    /// 静态方法由 static 关键字定义,静态方法可以通过类名访问而不需要任何实例对象‘在静态方法中不能访问类型中得任何非静态成员
    ///
    /// 实力方法需要通过具体的实例对象访问,可以访问实例对象的任何成员
    ///
    /// 当一个实例方法被绑定到委托,必须同时让委托得到实例方法的代码段和实例对象的信息,这样在委托回调的时候.NET才能执行该实力方法
    ///
    /// system.Delegate 内部结构中有 _target 和 _methodPtr 两个指针。其中,_ target 指向目标实例; _methodptr指向绑定方法。
    ///
    /// 当绑定实例方法时,_target设置为方法所在类型的实例对象;当绑定静态方法时,_target 被设置为 null
    ///
    /// 绑定实例方法和静态方法时,_methodptr都设置为所绑定的方法。
    ///
    ///
    /// </summary>
    ///

class SimpleDelegate
    {
        /// <summary>
        /// 定义一个委托
        /// </summary>
        /// <param name="i">接受一个整型的参数</param>
        public delegate void TestDelegate(int i);
        /// <summary>
        /// 一个静态方法,符合TestDelegate的定义
        /// </summary>
        /// <param name="i">整型参数</param>
        internal static void PrintMessage(int i)
        {
            Console.WriteLine("第{0}个方法", i);
        }
    }
    class Program
    {
        static void Main(string[] args)
        {

//委托
            //实例化委托对象,并且指向PrintMessage 方法
              SimpleDelegate.TestDelegate d = new SimpleDelegate.TestDelegate(SimpleDelegate.PrintMessage);
            //委托调用方法
            //当执行委托时,.NET 检查委托对象并找到 PrintMessage(int i) 方法,然后把参数传递给该方法并执行。
            //本质上,委托的调用就是执行在定义委托时所生产的 Invoke的方法
             d.Invoke(0);
            d.Invoke(1);
            //简化程序输入
            d(1);
            Console.Read();
        }
    }
}

转载于:https://www.cnblogs.com/menggo/archive/2012/05/07/2487785.html

SimpleDelegate 委托相关推荐

  1. (译)C#/.NET中的委托与事件

       C#/.NET中的委托与事件 下载本文的示例源码 目录 译者的话 概述 委托(Delegates) 直接调用方法-不用委托         最基本的委托         调用静态方法       ...

  2. 《CLR via C#:框架设计》读书笔记 - 委托

    ToDo: 写一个委托简单实例 回调函数是一种非常有用的机制. 回调函数[1] :回调函数就是一个通过函数指针调用的函数.如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用为调用它所指 ...

  3. c#委托与事件(二)

    这篇博客是在上篇的基础开始讲述了一下委托的一些用法,首先我举一个例子说明了一下前面章节的知识点,接下来我说了将方法作为参数传递的一个案例,接下来实现了一个委托实现冒泡排序的方法,如果你们和我一样正在学 ...

  4. RanceQuest2_从委托到Lambda_会用(递归数学函数)

    二连发 使用Lambda表达式编写递归函数 --摘自老赵点滴 - 追求编程之美. todo用手敲30遍,搞定--泛型委托,Lambda表达式,简单的数学递归. 遗憾的是,原本希望更进一步做出一个通用的 ...

  5. 利用委托和泛型实现树的常用操作

    在日常开发中,经常遇到对树的操作,我们可以利用泛型和委托对这些树进行操作,这样就不需要每有一个树就要实现相应的功能了. 源码在http://files.cnblogs.com/haiconc/Lang ...

  6. 理解委托(delegate)及为什么要使用委托

    委托:是一种定义方法签名的类型. 当实例化委托时,您可以将其实例与任何具有兼容签名的方法相关联. 您可以通过委托实例调用方法. 上述为官方说法,理解起来比较难,举个生活中的例子: 某人有三子,让他们各 ...

  7. dom元素滚动条高度 js_DOM 事件与事件委托

    点击事件 <div class = 爷爷><div class = 爸爸><div class = 儿子>文字</div></div> &l ...

  8. C#编码实践:使用委托和特性调用指定函数

    2019独角兽企业重金招聘Python工程师标准>>> 建立一个C#控制台应用程序AttributeTest. 建立一个类Operations,代码如下: namespace Att ...

  9. 匹夫细说C#:委托的简化语法,聊聊匿名方法和闭包

    0x00 前言 通过上一篇博客<匹夫细说C#:庖丁解牛聊委托,那些编译器藏的和U3D给的>的内容,我们实现了使用委托来构建我们自己的消息系统的过程.但是在日常的开发中,仍然有很多开发者因为 ...

最新文章

  1. Nature综述: 宏基因组关联分析-深入研究微生物组
  2. CNCC技术论坛:后量子霸权阶段的量子计算
  3. 风控评分卡建模全流程
  4. 关于C++默认拷贝构造函数产生的问题的讨论
  5. zabbix的安装监控windows,linux操作流程
  6. aqs java 简书,Java并发之AQS原理
  7. 访问对象的属性和方法
  8. lucene6.0 查询语句设置关键字boost值
  9. web mysql 报表_由简到难生成数据库报表(一)
  10. python学习:删除空白
  11. java 二进制置位,重置
  12. SQL 语句 - Select(6): 字段运算
  13. 打造真正理想中的会呼吸的智慧城市
  14. ## 2019-8-30 光滑粒子流体力学开源软件(Dual)sphysics使用中遇到的一些问题1
  15. 共享打印机提示服务器没有运行,提示无法共享打印机: “无法显示该属性,后台打印程序服务未运行”...
  16. 蓝桥杯单片机(八)DS18B20温度测量(整数显示)
  17. 一年之计在于春,一日之计在于晨, 一生之计在于勤,清晨起来修手机
  18. linux – Docker:无法添加对接口(不支持操作)
  19. 朱丹老师课程学习笔记:8、职场晋升-没人带怎么办?这样搜资料的小白也能变大神
  20. c语言tab什么意思_C语言所有的知识点干货

热门文章

  1. RabbitMQ的应用场景以及基本原理介绍
  2. 转另一个获取硬盘序列号的方法
  3. 如何降低在 npm 模块中发布敏感信息的可能性
  4. Git学习系列之Windows上安装Git之后的一些配置(图文详解)
  5. 掌握 Linux 调试技术【转】
  6. hdu 1043 Eight 搜索,哈希
  7. Qt编程之通过鼠标滚轮事件缩放QGraphicsView里面的Item
  8. NodeJs教程(介绍总结!)终于在网上找到一个靠谱点的了T_T
  9. 36.centos 安装文泉驿字体
  10. CentOS4 可用镜像及更新方式