c#中的泛型委托详解
今天学习一下c#中的泛型委托。
1.一般的委托,delegate,可以又传入参数(<=32),声明的方法为 public delegate void SomethingDelegate(int a);
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace delegateSummary { public delegate void GetIntDelegate(int a); //声明一个委托 public class getIntClass { public static void SetDelegateString(int a,GetIntDelegate getIntDelegate) {//使用委托 getIntDelegate(a); } public void getInt1(int a) { //方法1 Console.WriteLine("getInt1方法调用,参数为:" + a); } public void getInt2(int a) { //方法2 Console.WriteLine("getInt2方法调用,参数为:" + a); } } class Program { static void Main(string[] args) { getIntClass gc=new getIntClass(); getIntClass.SetDelegateString(5, gc.getInt1); //方法1,2作为委托的参数 getIntClass.SetDelegateString(10, gc.getInt2); Console.WriteLine("====================="); GetIntDelegate getIntDelegate; getIntDelegate = gc.getInt1; //将方法1,2绑定到委托 getIntDelegate += gc.getInt2; getIntClass.SetDelegateString(100, getIntDelegate); Console.Read(); } } }
输出结果,注意两种方式的不同,第一种将方法作为委托的参数,第二种是将方法绑定到委托。
2.泛型委托之Action,最多传入16个参数,无返回值。
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace delegateSummary { class Program { static void Main(string[] args) { TestAction<string>(getString, "WhiteTaken"); //传入方法 TestAction<int>(getInt, 666); TestAction<int, string>(getStringAndInt, 666, "WhiteTaken"); Console.Read(); } public static void TestAction<T>(Action<T> action,T p1) { //Action传入一个参数测试 action(p1); } public static void TestAction<T, P>(Action<T, P> action, T p1, P p2) { //Action传入两个参数测试 action(p1,p2); } public static void getString(string a) { //实现int类型打印 Console.WriteLine("测试Action,传入string,并且传入的参数为:" +a); } public static void getInt(int a) { //实现String类型打印 Console.WriteLine("测试Action,传入int,并且传入的参数为:" + a); } public static void getStringAndInt(int a, string name) { //实现int+string类型打印 Console.WriteLine("测试Action,传入两参数,并且传入的参数为:" + a+":"+name); } } }
测试结果:
3.泛型委托之Func,最多传入16个参数,有返回值。(写法与Action类似,只是多了返回值)
4.泛型委托之predicate(不是很常用),返回值为bool,用在Array和list中搜索元素。(没有用到过,等用到了再更新)
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持我们!
上一篇:C#生成随机数功能示例
栏 目:C#教程
下一篇:C#文件上传的简单实现
本文标题:c#中的泛型委托详解
本文地址:https://www.xiuzhanwang.com/a1/C_jiaocheng/6025.html
您可能感兴趣的文章
- 01-10C#中查找Dictionary中的重复值的方法
- 01-10C#将图片存放到SQL SERVER数据库中的方法
- 01-10关于nancy中的身份验证
- 01-10C#中的事务用法实例分析
- 01-10C#实现读取DataSet数据并显示在ListView控件中的方法
- 01-10C#中的正则表达式介绍
- 01-10C#开发中的垃圾回收机制简析
- 01-10C#语言中的修饰符汇总
- 01-10C#中的 == 和equals()区别浅析
- 01-10C#基于委托实现多线程之间操作的方法
阅读排行
本栏相关
- 01-10C#通过反射获取当前工程中所有窗体并
- 01-10关于ASP网页无法打开的解决方案
- 01-10WinForm限制窗体不能移到屏幕外的方法
- 01-10WinForm绘制圆角的方法
- 01-10C#实现txt定位指定行完整实例
- 01-10WinForm实现仿视频播放器左下角滚动新
- 01-10C#停止线程的方法
- 01-10C#实现清空回收站的方法
- 01-10C#通过重写Panel改变边框颜色与宽度的
- 01-10C#实现读取注册表监控当前操作系统已
随机阅读
- 08-05织梦dedecms什么时候用栏目交叉功能?
- 01-10delphi制作wav文件的方法
- 01-11Mac OSX 打开原生自带读写NTFS功能(图文
- 04-02jquery与jsp,用jquery
- 01-10使用C语言求解扑克牌的顺子及n个骰子
- 08-05DEDE织梦data目录下的sessions文件夹有什
- 01-10SublimeText编译C开发环境设置
- 08-05dedecms(织梦)副栏目数量限制代码修改
- 01-11ajax实现页面的局部加载
- 01-10C#中split用法实例总结