c# 了解委托
public delegate void aHandler(string text);
public class A1
{
public void Print(string txt)
{
Console.WriteLine(txt + "我是1号");
}
}
public class A2
{
public void Print(string txt)
{
Console.WriteLine(txt + "我是2号");
}
}
class B1
{
public static void StaticPrint(string txt)
{
Console.WriteLine(txt + "我是3号");
}
public static void Main()
{
string my = "委托链";
A1 a1 = new A1();
A2 a2 = new A2();
//创建委托实例
aHandler ah1 = new aHandler(a1.Print);
aHandler ah2 = new aHandler(a2.Print);
aHandler ah3 = new aHandler(StaticPrint);
Console.WriteLine("委托实例ah1的打印结果:");
ah1(my);
Console.WriteLine("委托实例ah2的打印结果:");
ah2(my);
Console.WriteLine("委托实例ah1+ah2的打印结果:");
aHandler ah = ah1 + ah2;
ah(my);
Console.WriteLine("委托实例ah1+ah2+ah3的打印结果:");
ah += ah3;
ah(my);
Console.WriteLine("委托实例ah1+ah3的打印结果:");
ah -= ah2;
ah(my);
Console.WriteLine("委托实例ah3的打印结果:");
ah -= ah1;
ah(my);
Console.WriteLine("试图调用null委托会引发异常");
try
{
ah-=ah3;
ah(my);
}
catch(NullReferenceException ex) //尝试取消引用空引用对象时引发的异常
{
Console.WriteLine(ex.Message);
}
Console.WriteLine("试图从null中移出委托是无效操作");
try
{
ah -=ah3;
}
catch(NullReferenceException ex)
{
Console.WriteLine(ex.Message);
}
Console.Read();
}
}
运行结果:
委托实例ah1的打印结果:
委托链我是1号
委托实例ah2的打印结果:
委托链我是2号
委托实例ah1+ah2的打印结果:
委托链我是1号
委托链我是2号
委托实例ah1+ah2+ah3的打印结果:
委托链我是1号
委托链我是2号
委托链我是3号
委托实例ah1+ah3的打印结果:
委托链我是1号
委托链我是3号
委托实例ah3的打印结果:
委托链我是3号
试图调用null委托会引发异常
未将对象引用设置到对象的实例。
试图从null中移出委托是无效操作
委托是对方法或方法列表的引用,可以说是一种引用类型。委托分为三步:声明、实例化、调用。
c# 了解委托的更多相关文章
- HTML 事件(三) 事件流与事件委托
本篇主要介绍HTML DOM中的事件流和事件委托. 其他事件文章 1. HTML 事件(一) 事件的介绍 2. HTML 事件(二) 事件的注册与注销 3. HTML 事件(三) 事件流与事件委托 4 ...
- C#基础篇 - 理解委托和事件
1.委托 委托类似于C++中的函数指针(一个指向内存位置的指针).委托是C#中类型安全的,可以订阅一个或多个具有相同签名方法的函数指针.简单理解,委托是一种可以把函数当做参数传递的类型.很多情况下,某 ...
- [.NET] C# 知识回顾 - 委托 delegate (续)
C# 知识回顾 - 委托 delegate (续) [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/6046171.html 序 上篇<C# 知识回 ...
- [C#] C# 知识回顾 - 委托 delegate
C# 知识回顾 - 委托 delegate [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/6031892.html 目录 What's 委托 委托的属性 ...
- 9、委托、事件、Lambda
开始 关于委托,肯定是要有问题的. 第一个问题,委托用来干什么? 看.net中的表述:在.net平台下,委托类型用来定义和相应应用程序中的回调.(回调?处理内存中两个实体双向通信的一种技术.) 第 ...
- iOS 委托与文本输入(内容根据iOS编程编写)
文本框(UITextField) 本章节继续编辑 JXHypnoNerd .文件地址 . 首先我们继续编辑 JXHypnosisViewController.m 修改 loadView 方法,向 ...
- C#委托异步调用
参考页面: http://www.yuanjiaocheng.net/webapi/mvc-consume-webapi-get.html http://www.yuanjiaocheng.net/w ...
- JavaScript事件代理和委托(Delegation)
JavaScript事件代理 首先介绍一下JavaScript的事件代理.事件代理在JS世界中一个非常有用也很有趣的功能.当我们需要对很多元素添加事件的时候,可以通过将事件添加到它们的父节点而将事件委 ...
- .NET面试题系列[7] - 委托与事件
委托和事件 委托在C#中具有无比重要的地位. C#中的委托可以说俯拾即是,从LINQ中的lambda表达式到(包括但不限于)winform,wpf中的各种事件都有着委托的身影.C#中如果没有了事件,那 ...
- .NET基础拾遗(4)委托、事件、反射与特性
Index : (1)类型语法.内存管理和垃圾回收基础 (2)面向对象的实现和异常的处理基础 (3)字符串.集合与流 (4)委托.事件.反射与特性 (5)多线程开发基础 (6)ADO.NET与数据库开 ...
随机推荐
- Blockchain概述--转
编者按:著名投资人 Fred Wilson 的同事 Joel Monegro 近日参加了纽约比特币 workshop HackBit聚会,其间他们讨论了比特币式的思维方式对未来十年世界的影响,而这种影 ...
- PLSQL_低效SQL的识别和查询汇总(案例)
2014-12-18 Created By BaoXinjian
- PLSQL_性能优化系列20_Oracle Result Cash结果缓存
20150528 Created By BaoXinjian
- weinre 手机端页面调试
Weinre代表 Web Inspector Remote,是一种远程调试工具, 采用nodejs做为http服务器,用ajax通信 nodejs 官网 weinre官网 1.安装nodejs 会自 ...
- PHP每日签到时怎么实现
以淘宝网领取淘金币的签到系统为例:目标:第一天签到增加5个积分:第二天连续签到则增加8个积分:第三天连续签到,增加11个积分,第 四天连续签到,增加15个积分:第五天连续签到,增加19个积分:第六天连 ...
- 并发容器之ConcurrentSkipListSet
概要 本章对Java.util.concurrent包中的ConcurrentSkipListSet类进行详细的介绍.内容包括:ConcurrentSkipListSet介绍ConcurrentSki ...
- java多线程之从任务中获取返回值
package wzh.test; import java.util.ArrayList; import java.util.concurrent.Callable; import java.util ...
- Android之Service
1.自定义Service类 package com.example.mars_2000_service; import android.app.Service; import android.cont ...
- block作为类的属性时用copy
1. block作为类的属性时用copy Block属性的声明,首先需要用copy修饰符,因为只有copy后的Block才会在堆中,栈中的Block的生命周期是和栈绑定的 <栈 :由系统维护的局 ...
- Java 线程间通讯(管道流方式)
一.管道流是JAVA中线程通讯的常用方式之一,基本流程如下: 1)创建管道输出流PipedOutputStream pos和管道输入流PipedInputStream pis 2)将pos和pis匹配 ...