SimpleDelegate 委托
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 委托相关推荐
- (译)C#/.NET中的委托与事件
C#/.NET中的委托与事件 下载本文的示例源码 目录 译者的话 概述 委托(Delegates) 直接调用方法-不用委托 最基本的委托 调用静态方法 ...
- 《CLR via C#:框架设计》读书笔记 - 委托
ToDo: 写一个委托简单实例 回调函数是一种非常有用的机制. 回调函数[1] :回调函数就是一个通过函数指针调用的函数.如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用为调用它所指 ...
- c#委托与事件(二)
这篇博客是在上篇的基础开始讲述了一下委托的一些用法,首先我举一个例子说明了一下前面章节的知识点,接下来我说了将方法作为参数传递的一个案例,接下来实现了一个委托实现冒泡排序的方法,如果你们和我一样正在学 ...
- RanceQuest2_从委托到Lambda_会用(递归数学函数)
二连发 使用Lambda表达式编写递归函数 --摘自老赵点滴 - 追求编程之美. todo用手敲30遍,搞定--泛型委托,Lambda表达式,简单的数学递归. 遗憾的是,原本希望更进一步做出一个通用的 ...
- 利用委托和泛型实现树的常用操作
在日常开发中,经常遇到对树的操作,我们可以利用泛型和委托对这些树进行操作,这样就不需要每有一个树就要实现相应的功能了. 源码在http://files.cnblogs.com/haiconc/Lang ...
- 理解委托(delegate)及为什么要使用委托
委托:是一种定义方法签名的类型. 当实例化委托时,您可以将其实例与任何具有兼容签名的方法相关联. 您可以通过委托实例调用方法. 上述为官方说法,理解起来比较难,举个生活中的例子: 某人有三子,让他们各 ...
- dom元素滚动条高度 js_DOM 事件与事件委托
点击事件 <div class = 爷爷><div class = 爸爸><div class = 儿子>文字</div></div> &l ...
- C#编码实践:使用委托和特性调用指定函数
2019独角兽企业重金招聘Python工程师标准>>> 建立一个C#控制台应用程序AttributeTest. 建立一个类Operations,代码如下: namespace Att ...
- 匹夫细说C#:委托的简化语法,聊聊匿名方法和闭包
0x00 前言 通过上一篇博客<匹夫细说C#:庖丁解牛聊委托,那些编译器藏的和U3D给的>的内容,我们实现了使用委托来构建我们自己的消息系统的过程.但是在日常的开发中,仍然有很多开发者因为 ...
最新文章
- Nature综述: 宏基因组关联分析-深入研究微生物组
- CNCC技术论坛:后量子霸权阶段的量子计算
- 风控评分卡建模全流程
- 关于C++默认拷贝构造函数产生的问题的讨论
- zabbix的安装监控windows,linux操作流程
- aqs java 简书,Java并发之AQS原理
- 访问对象的属性和方法
- lucene6.0 查询语句设置关键字boost值
- web mysql 报表_由简到难生成数据库报表(一)
- python学习:删除空白
- java 二进制置位,重置
- SQL 语句 - Select(6): 字段运算
- 打造真正理想中的会呼吸的智慧城市
- ## 2019-8-30 光滑粒子流体力学开源软件(Dual)sphysics使用中遇到的一些问题1
- 共享打印机提示服务器没有运行,提示无法共享打印机: “无法显示该属性,后台打印程序服务未运行”...
- 蓝桥杯单片机(八)DS18B20温度测量(整数显示)
- 一年之计在于春,一日之计在于晨, 一生之计在于勤,清晨起来修手机
- linux – Docker:无法添加对接口(不支持操作)
- 朱丹老师课程学习笔记:8、职场晋升-没人带怎么办?这样搜资料的小白也能变大神
- c语言tab什么意思_C语言所有的知识点干货