C# 泛型委托

C#委托的使用方法 C# 委托的使用方法1 委托的定义2 什么时候使用委托3 委托有哪些形式?4 委托的语法,使用5 委托的使用流程 1 委托的定义 C# 中的委托(Delegate)类似于 C 或 C++ 中函数的 指针 。委托(Delegate) 是存有对某个方法的引用的一种引用类型变量。引用可在运行时被改变。委托(Delegate)特别用于实现事件和回调方法。所有的委托(Delegate)都派生自 Sys... 阅读详情
  http://developer.51cto.com/art/200908/146230.htm 

C# 泛型委托学习之前首先来看看什么是C# 委托,C# 委托是一种引用方法的类型。一旦为委托分配了方法,C# 委托将与该方法具有完全相同的行为。委托方法的使用可以像其他任何方法一样,具有参数和返回值,如下面的示例所示:与委托的签名(由返回类型和参数组成)匹配的任何方法都可以分配给该委托。这样就可以通过编程方式来更改方法调用,还可以向现有类中插入新代码。只要知道委托的签名,便可以分配自己的委托方法。

C# 泛型委托代码

 
  1. public delegate int PerformCalculation(int x, int y); 

将方法作为参数进行引用的能力使委托成为定义回调方法的理想选择。例如,可以向排序算法传递对比较两个对象的方法的引用。分离比较代码使得可以采用更通用的方式编写算法。

C# 委托具有以下特点:

◆C# 委托类似于 C++ 函数指针,但它是类型安全的。

◆C# 委托允许将方法作为参数进行传递。

◆C# 委托可用于定义回调方法。

◆C# 委托可以链接在一起;例如,可以对一个事件调用多个方法。

◆方法不需要与委托签名精确匹配。

◆C# 2.0 版引入了匿名方法的概念,此类方法允许将代码块作为参数传递,以代替单独定义的方法。

C# 泛型委托的理解及应用:

C# 委托可以定义自己的类型参数。引用泛型委托的代码可以指定类型参数以创建已关闭的构造类型,就像实例化泛型类或调用泛型方法一样,如下例所示:

C# 泛型委托代码

 
  1. public delegate void Del﹤T﹥(T item);  
  2. public static void Notify(int i) { }  
  3.  
  4. Del﹤int﹥ m1 = new Del﹤int﹥(Notify); 

C# 2.0 版具有称为方法组转换的新功能,此功能适用于具体委托类型和泛型委托类型,并使您可以使用如下简化的语法写入上一行:

C# 泛型委托代码

 
  1. Del﹤int﹥ m2 = Notify; 

在泛型类内部定义的委托使用泛型类类型参数的方式可以与类方法所使用的方式相同。

C# 泛型委托代码

 
  1. class Stack﹤T﹥  
  2. {  
  3.     T[] items;  
  4.     int index;  
  5.  
  6.     public delegate void StackDelegate(T[] items);  
  7. } 

引用委托的代码必须指定包含类的类型变量,如下所示:

C# 泛型委托代码

 
  1. private static void DoWork(float[] items) { }  
  2.  
  3. public static void TestStack()  
  4. {  
  5.     Stack﹤float﹥ s = new Stack﹤float﹥();  
  6.     Stack﹤float﹥.StackDelegate d = DoWork;  
  7. } 

根据典型设计模式定义事件时,泛型委托尤其有用,因为发送方参数可以为强类型,不再需要强制转换成 Object,或反向强制转换。

C# 泛型委托代码

 
  1. delegate void StackEventHandler﹤T, U﹥(T sender, U eventArgs);  
  2.  
  3. class Stack﹤T﹥  
  4. {  
  5.     public class StackEventArgs : System.EventArgs { }  
  6.     public event StackEventHandler﹤Stack﹤T﹥,   
  7. StackEventArgs﹥ stackEvent;  
  8.  
  9.     protected virtual void OnStackChanged(StackEventArgs a)  
  10.     {  
  11.         stackEvent(this, a);  
  12.     }  
  13. }  
  14.  
  15. class SampleClass  
  16. {  
  17.     public void HandleStackChange﹤T﹥(Stack﹤T﹥ stack,  
  18.  Stack﹤T﹥.StackEventArgs args) { }  
  19. }  
  20.  
  21. public static void Test()  
  22. {  
  23.     Stack﹤double﹥ s = new Stack﹤double﹥();  
  24.     SampleClass o = new SampleClass();  
  25.     s.stackEvent += o.HandleStackChange;  
  26. } 

C# 泛型委托的相关内容就向你介绍到这里,希望对你了解和学习C# 泛型委托有所帮助

【C#】C#结构体,枚举,泛型,事件,委托 一.结构体 二.特殊的结构体(ref struct): 三.枚举 四.泛型 泛型的使用: 1.泛型类:定义一个泛型类,使用类型参数T 2.泛型方法:在方法定义中使用类型参数 3.泛型接口 五.委托及泛型委托 委托 泛型委托 六.事件 事件: 泛型事件:使用泛型委托(如EventHandler)来声明事件,可以传递更具体的事件数据。 七.事件,委托,泛型结合使用 阅读详情

相关推荐

C# 委托和泛型委托示例

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleApp6 { class Program { public delegate void SaySomething(string name); //定义委托 public static event.

深南大道 322

C#_泛型_委托

C# 中的委托(Delegate)类似于 C 或 C++ 中函数的指针。委托(Delegate) 是存有对某个方法的引用的一种引用类型变量。是一种规范,它允许我们使用占位符来定义类和方法,编译器会在编译时将这些占位符替换为指定的类型,利用泛型的这一特性我们可以定义通用类(泛型类),方法(泛型方法),接口(泛型接口)。2.当委托中没有存储任何方法的时候,执行会报错:未将对象引用设置到对象的实例 ,解决方法—简写为?主页有21天速通C#教程欢迎订阅!1.委托被调用的时候,会执行该委托变量中存储的所有的方法。

2401_82410658的博客 2060

C#泛型、委托与事件解析

不错的文章(.net)--泛型、委托与事件解析

C#泛型委托

这个比较简单,从delegate关键字到匿名委托方法,再到Action和Func,Action是无返回值的委托,Func是有返回值的委托,现在基本上都是基于Action和Func来写委托的,有些和业务逻辑连接起来写匿名委托方法。从中我们可以看到where和自定义的NewWhere,功能是一样的,也就是说where也是用了泛型委托。所以,我们可以传递一个类型的数据进去,然后再传递一个方法进去,自动就加工返回值了。可以看到都是where的功劳,现在我们可以使用泛型委托自己自定义一个和where一样的功能。...

故里2130 2354

计算机组成原理 微程序控制器实验

微程序控制器实验 实验环境 计算机组成原理实验环境 实验目的 掌握微程序控制器的组成原理和工作过程。 理解微指令和微程序的概念,理解微指令与指令的区别与联系。 掌握指令操作码与控制存储器中微程序的对应方法。熟悉根据指令操作码从控制存储器中读出微程序的过程。 实验要求 做好实验预习,读懂实验电路图,熟悉实验元器件的功能特性和使用方法。 按照实验内容与步骤的要求,独立思考,认真仔细地完成实验。 写出实验报告。 实验电路        

Long_UP的博客 7万+

QT使用openssl实现RSA加解密

使用openssl生成公私钥,随后用QT对相应的信息进行RSA加解密

weixin_42098322的博客 3867

C#泛型入门泛型类、泛型集合、泛型方法、泛型约束、泛型委托

泛型集合和ArrayList的装箱拆箱、常见的泛型类型、泛型类和泛型方法、泛型约束、 泛型委托泛型很难理解?不然在接触的一个新的概念的时候,总会感觉难以理解,当你掌握并能熟练地使用的时候,发现这个概念其实简单的,我相信大多数码农都会有这种似曾相识的感觉。可能大多数人刚学习泛型的时候觉得很难理解,当然我也是这样的,所以便写下这篇文章加深一下对泛型的印象。

dotNet全栈开发 4万+

手把手教你用CODESYS将旧笔记本改造成软PLC(含证书配置避坑指南)

本文提供了一份详尽的指南,教你如何利用CODESYS平台将闲置旧笔记本改造为一台功能完整的软PLC。内容涵盖从硬件评估、系统实时性优化、软件安装与驱动配置,到关键的证书授权管理避坑指南,旨在帮助自动化工程师和爱好者低成本搭建稳定可靠的学习与开发平台。

weixin_29190573的博客 278

C#泛型委托事件详解及实例

// 泛型委托的构造类型:需要一个形参为int类型、返回值类型为bool类型的方法对其进行初始化/// 泛型委托的构造类型:需要一个形参为string类型、返回值类型为int类型的方法对齐进行初始化.NET给我们预定义了很多泛型委托,日常编码工作中使用这些类型的泛型委托基本就已足够,下面我们只介绍三个常用的预定义的泛型委托。

u011555996的博客 1350

第1讲|AI产品经理全景图谱:不是“会用AI工具”,而是能对AI产品结果负责

本文从岗位本质出发,系统拆解 AI 产品经理的职责、岗位类型与能力模型,帮助读者理解 AI PM 与传统 PM 的核心差异,明确自己适合的转型方向,并建立“对 AI 产品结果负责”的产品认知。

从零开始,掌握网络安全。提供全面的网络安全教程、攻防演练技巧和行业动态。 1014

2011-2024年间各省数字普惠金融指数数据(覆盖广度、使用深度和数字化程度)

2、指标:数字金融普惠指数、数字金融覆盖广度指数、数字金融使用深度指数、普惠金融数字化程度指数、数字金融使用深度指数下属的支付、保险、货币基金、信用服务、投资、信贷等分类指数。中国各省的数字普惠金融指数数据,从数字金融覆盖广度、数字金融使用深度和普惠金融数字化程度3个维度来构建数字普惠金融指标体系。数字普惠金融指数一共3个维度、33项具体指标。全套指数包含数字金融覆盖广度指数、数字金融使用深度指数和普惠金融数字化程度指数,以及数字金融使用深度指数下属的支付、保险、货币基金、信用服务、投资、信贷等分类指数。

【优快云】 1万+

C# 泛型、委托

泛型 generic 一、什么是泛型 泛型是C#2.0推出的新语法,不是语法糖,而是2.0由框架升级提供的功能。 我们在编程程序时,经常会遇到功能非常相似的模块,只是它们处理的数据不一样。但我们没有办法,只能分别写多个方法来处理不同的数据类型。这个时候,那么问题来了,有没有一种办法,用同一个方法来处理传入不同种类型参数的办法呢?泛型的出现就是专门来解决这个问题的。 二、为什么使用泛型 先来看下面一...

Andy Blog 803

YOLO26剪枝 lamp剪枝测试精度仅掉0.7个点,速度提高11.8fps!

针对没有如何去选择剪枝的内容LAMP是层自适应幅度调整剪枝,无需任何参数,通过算法内部自己计算每个层的重要程度进行剪枝。基于权重重要程度和该层权重大小关系,权重越大表明该层越重要的思想进行优化。这个跟我前面说的非结构化全局剪枝是一个解法(MP),也就是lamp是在我前面那个非结构化剪枝的基础上进行优化的。但是这个逐层进行非结构剪枝目前还没有一个清晰的概念,确定每个层要剪枝多少。LAMP得分是一个平方权重大小,由层中所有“幸存权重”的总和归一化。

m0_64661770的博客 673

c#泛型使用详解:泛型特点、泛型继承、泛型接口、泛型委托

泛型:通过参数化类型来实现在同一份代码上操作多种数据类型。利用“参数化类型”将类型抽象化,从而实现灵活的复用。在.NET类库中处处都可以看到泛型的身影,尤其是数组和集合中,泛型的存在也大大提高了程序员的开发效率。更重要的是,C#的泛型比C++的模板使用更加安全,并且通过避免装箱和拆箱操作来达到性能提升的目的。因此,我们很有必要掌握并善用这个强大的语言特性。 C#泛型特点: 1、如果实例

zdhlwt2008的博客 1万+

大规模新闻聚合爬虫实战:Python爬取数百万新闻数据的完整指南

本文详细介绍了如何构建一个大规模新闻聚合爬虫,结合Python异步爬虫技术,实现高效、稳定的新闻数据采集。增加NLP模块对新闻内容做自动分类、情感分析。引入机器学习模型检测新闻真实性。使用分布式爬虫框架进一步提升规模。增加多媒体内容抓取与处理。

2201_76125261的博客 1553

[QMT量化交易小白入门]-九十五、多因子选股和趋势择时股票量化交易策略,年化收益率40.61%

本策略采用“双层过滤”机制:第一层基于多维度财务指标进行股票池筛选(多因子选股),第二层运用均线系统和MACD指标实施动态择时(趋势跟踪)。这种设计既保证了组合的质量下限,又能灵活应对市场波动。因子配置科学性:涵盖估值、成长、盈利、动量四大类因子风险控制精细化:设置动态止损与仓位管理机制信号验证严格性:多重条件交叉验证提升胜率。

木头大左的博客 798

C#泛型委托和接口泛型

委托实例1: using System; namespace Test { delegate void MyDelegate<T>(T value); //泛型委托 class Simple { static public void PrintString(string s) //方法匹配委托 ...

qq_43620215的博客 458

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

C#入门级——泛型、泛型类、泛型接口、泛型方法和泛型委托

C#入门级——泛型、泛型类、泛型接口、泛型方法和泛型委托

dlwlrma_516的博客 5038

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

c#:委托 泛型委托的使用 泛型约束

这样做的好处是,通过使用 delegate,我们可以将方法作为一个参数传递给其他方法,或者将其存储在变量中,以便在稍后的代码中调用它。在 C# 中,delegate 是一种引用类型,它允许您定义和使用可以引用特定方法的对象。delegate 可以看作是一种函数指针,它可以在运行时动态地调用不同的方法。泛型委托是一种允许指定不同类型的方法作为参数的委托。它可以提供更大的灵活性和重用性,因为您可以在运行时根据需要指定方法的类型。在上面的示例中,我们首先定义了一个 delegate 类型。参数和无返回值的方法。

dongnihao的博客 1582

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

C#内置泛型委托:Action委托

C#内置泛型委托:Action委托 1、什么是Action泛型委托 Action<T>是.NET Framework内置的泛型委托,可以使用Action<T>委托以参数形式传递方法,而不用显示声明自定义的委托。封装的方法必须与此委托定义的方法签名相对应。也就是说,封装的方法必须具有一个通过值传递给它的参数,并且不能有返回值。 2、Action委托定义 查看Action的定义: using System.Runtime.CompilerServices; namesp

weixin_44674885的博客 1179

c#泛型排序·委托

c#泛型排序 泛型排序用于多类对象结构体分别排序的情况,也算是进一步了解委托。 class Program { static void Main(string[] args) { Student[] stu = { new Student("stu1", 40), new Studen...

qq_45946890的博客 310

C#委托三——泛型委托

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

Eden's space 1008
上一篇: 提高网速的方法
下一篇: js document.createElement()的用法 (转)
ArvinStudy
博客等级 码龄15年 83粉丝 193原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值