PanPen120在CSDN上原创,如其他网站转载请注意排版和写明出处:

今天一直在研究委托,因为有函数指针的基础,还容易上手,但是对于一些概念和实践,总是为了弄的非常清楚而纠结,这几篇关于委托的文章我是结合《C#与.NET4高级程序设计》、MSDN、借鉴其他人的博文来总结话语,以最直接简洁的话来阐述清楚(在我弄懂之前网上的感觉都很模糊)

namespace DelegateCovariance
{class A{public int str = 1;public void aa() { Console.WriteLine("A"); }}class B : A{public int str = 2;public void aa() { Console.WriteLine("B"); }}class Program{public delegate A HandlerMethod();private static A s1() { return new A(); }private static B s2() { return new B(); }static void Main(string[] args){HandlerMethod tt = new HandlerMethod(s1);A t1 = tt();Console.WriteLine("{0}", t1);HandlerMethod tt2 = new HandlerMethod(s2);A t2 = tt2();Console.WriteLine("{0}", t2);Console.ReadLine();}}
}

//试验本段代码只需拷贝代替原Progarm.cs中的内容(除去using部分)

//协变(宽松委托):
//              目的:构建一个委托类型,能指向返回类及继承体系的方法
//                      -----就是只需要构建一个返回值是父类的委托,类和派生类能同时使用的委托方法
//              用法:1.委托类型是返回值是父类
//                     例如:public delegate A HandlerMethod();
//                    2.委托的对象传入的是返回父类(或子类)对象的方法(这也是和委托类型对应了)
//                     例如:private static A s1() { return new A(); }
//                           HandlerMethod tt = new HandlerMethod(s1);
//                    3.调用父类(或子类)成员则将传统=后面new的部分换成对应的委托对象(对应:委托对象接收传入的方法是返回是哪个类的对象)
//                     例如:private static A s1() { return new A(); }
//                           HandlerMethod tt = new HandlerMethod(s1);
//                           A t1 = tt();

C#委托二——委托协变相关推荐

  1. java 匿名委托_委托,匿名方法,λ 表达式

    1.委托:委托本质上就是函数指针,但由于指针过于灵活,因此在很多语言中都采用了更加安全的替代类型,比如Delphi的对象方法和C#的委托.委托使得方法可以做为参数进行传递,极大的方便了程序的处理(事件 ...

  2. 委托声明----委托实例化-----委托调用

    定义和使用委托分三个步骤: 1.委托声明.2.委托实例化.3.委托调用. 一.定义委托 定义委托的语法如下: <访问修饰符> delegate 返回类型 委托名(); 定义委托和定义方法很 ...

  3. C语言中的函数指针、函数的直接/间接调用、C# 委托(自定义委托、内置泛型委托、委托的实例化、委托的一般使用(模板方法、回调方法)、泛型委托、多播委托、同步/异步使用委托)

    文章目录 C语言中的函数指针 函数的直接调用与间接调用 Java中没有与委托对应的功能实体 C# 委托 C# 自定义委托类型 C# 内置泛型委托类型 委托的实例化 委托也支持泛型的使用 委托的一般使用 ...

  4. 什么是叫委托,委托的意义和作用

     Public Class Class1 '什么是叫委托,委托的意义和作用. '委托概念的产生原因是因为分别出现了代码的设计者和使用者的关系. '因为这种设计者与使用者的关系的原因,就出现了代码的 ...

  5. java eventhandler 触发_事件、委托、委托方法的总结(使用EventHandler)

    在C#中,定义事件.委托.委托方法可以使用类库内的EventHandler泛型委托来定义事件.并根据该泛型委托定义实现方法: 同样您也可以自定义委托 来定义事件以及 根据自定义的委托来定义实现事件的方 ...

  6. [读书笔记]C#学习笔记二: 委托和事件的用法及不同.

    前言:  C#委托是什么 c#中的委托可以理解为函数的一个包装, 它使得C#中的函数可以作为参数来被传递, 这在作用上相当于C++中的函数指针. C++用函数指针获取函数的入口地址, 然后通过这个指针 ...

  7. 转载-C#委托之多播委托( 二)

    通过一个委托调用多个方法可能导致一个大问题,多播委托包含一个逐个调用的委托集合,如果通过委托调用的其中一个方法抛出一个异常,整个迭代就会停止 示例如下:Action为无参委托 static void ...

  8. 分配委托、匿名委托、委托

    分配委托(将命名方法分配给其委托) using System;public class GenericFunc {public static void Main(){// Instantiate de ...

  9. [UnityC#事件委托]对委托事件的学习与实践

    很多人对 委托 事件 进行了 写文章,本文不一定是最好的,但是是 最"看图识字"的. ----------------------------------------------- ...

最新文章

  1. OpenCV入门要掌握的基本函数
  2. JAVA层HIDL服务的获取原理-Android10.0 HwBinder通信原理(九)
  3. js笔记之Math random()、ceil()、floor()、round()
  4. 实体类dao接口mysql_利用MyBatis生成器自动生成实体类、DAO接口和Mapping映射文件...
  5. 百度人脸搜索的一次尝试(JAVA)
  6. 为什么我的论文没人引用?
  7. 移动平台深度神经网络实战
  8. Win7下的使用QTP进行猴子测试的性能日志实现方法
  9. IEEE Spectrum:这些小机器人又好玩又实用,适合过年带回家
  10. B1231 [Usaco2008 Nov]mixup2 混乱的奶牛 状压dp
  11. 遭遇Asp.Net长文件名下载的问题和解决办法
  12. 软考网络工程师--数据通信基础
  13. 图像加密标准测试图库
  14. 施柏阁保时捷设计酒店全球陆续开设15家酒店;汉庭新品旗舰店在武汉街道口商圈亮相;开元酒店用国潮赋能中高端品牌 | 全球旅报...
  15. ubuntu安装gem和fastlane
  16. 2019年Q1美国手游市场总收入24.3亿美元,中国手游贡献2.8亿美元
  17. antd table自适应(横向滚动条)
  18. xxxxxxxxxxxxxx
  19. 京东关于区块链的发展历程
  20. 电子元器件贸易如何应用采购管理系统,做好采购订单交期管理?

热门文章

  1. 电子取证之服务器取证,本人小白第一次从pc取证到服务器,这里有一套例题分享给大家,所有解析我都尽可能全面具体,希望与各位同仁一起学习。(非常推荐!)
  2. matlab计算一组数的函数值_2.Matlab数值数组及其运算
  3. ORA-39097:Data Pump job encountered unexpected error 06502
  4. 解决 用 Nginx 处理 跨域问题
  5. GitHub上广受欢迎的下载神器:youtube-dl
  6. 7-13 愿天下有情人都是失散多年的兄妹 (25 分)
  7. Jupyter notebook中的Markdown单元格(4)图片
  8. 智能手机丢失照片如何恢复
  9. 【每天读一点英文】gnuhpc:The World As I See It(节选)
  10. 智慧商圈,对接微信、支付宝、云闪付实现自动积分