博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C# 委托和泛型
阅读量:6611 次
发布时间:2019-06-24

本文共 2306 字,大约阅读时间需要 7 分钟。

委托定义:

委托是一个类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递,这种将方法动态地赋给参数的做法,可以避免在程序中大量使用If-Else(Switch)语句,同时使得程序具有更好的可扩展性。

  • 委托是一个类:因此声明委托可以在类的外面声明,形式与声明类一样,例如
//定义一个委托    public delegate void EventHandler(Dictionary
dic);

 

我的理解:委托可以把方法当做参数传递给另一个方法,这在异步操作中非常常见

例如在JS中,通过Ajax获取数据时需要传递一个回调函数

而C#属于强类型语言,声明函数参数时必须给定类型,所以这才有了委托

举个栗子

//定义一个委托    public delegate void EventHandler(Dictionary
dic); public class User { //这个方法的作用是从异步从 数据库/文件 中获取用户数据,然后在处理,因为是异步的,所以只能采用回调的形式,所以这里必须使用委托 public void getUserInfo(EventHandler del) { //模拟从数据库读取数据 Dictionary
user = new Dictionary
(); user.Add("name", "张三"); user.Add("age", "30"); //使用委托 del(user); } }
class Program    {        static void Main(string[] args)        {            User user = new User();            //这里使用匿名函数的形式 函数签名必须与委托保持一致            user.getUserInfo(data =>            {                foreach (KeyValuePair
kv in data) { Console.WriteLine(kv.Key + ':' + kv.Value); } Console.ReadLine(); }); } }

什么是泛型:

我们在编写程序时,经常遇到两个模块的功能非常相似,只是一个是处理int数据,另一个是处理string数据,或者其他自定义的数据类型,但我们没有办法,只能分别写多个方法处理每个数据类型,因为方法的参数类型不同。有没有一种办法,在方法中传入通用的数据类型,这样不就可以合并代码了吗?泛型的出现就是专门解决这个问题的

简而言之:泛型是一段代码适配多种类型的解决方案

例如:获取数组中最大的值,数组可能是 int数组 string数组...

class Program    {        static void Main(string[] args)        {            int[] arr = new int[] { 1, 2, 3, 4, 5, 6 };            int maxNumber = getMax
(arr, (n1, n2) => { return n1 - n2; }); string[] arr1 = new string[] { "a", "ab", "abc", "abcd" }; string maxString = getMax
(arr1, (s1, s2) => { return s1.Length - s2.Length; }); Console.Read(); } public static T getMax
(T[] arr ,Max
del) { T max = arr[0]; foreach (T item in arr) { if (del(max, item) < 0) { max = item; } } return max; } }

 

转载于:https://www.cnblogs.com/xiaoliwang/p/9515480.html

你可能感兴趣的文章
行内元素和块级元素总结
查看>>
批量安装APK,可是没解决APK名称为中文的问题
查看>>
WinRT支持GB2312
查看>>
求一颗二叉树上的最远距离(树形DP)
查看>>
Activity.finish()
查看>>
Centos6.7安装Pycharm及升级JDK
查看>>
virtualbox+vagrant学习-3-Vagrant Share-6-Custom Provider
查看>>
软考倒计时18天
查看>>
34.CSS传统布局【上】
查看>>
And Then There Was One
查看>>
JavaScript菜单树
查看>>
创新变革,开拓新源,命运流转
查看>>
MySQL的优化与执行
查看>>
ElasticSearch常用命令
查看>>
转:PHP程序里的敏感信息处理方法
查看>>
只有火狐识别的css
查看>>
团队冲刺第八天
查看>>
hive类型转化错误,会错误提示指定分区参数
查看>>
开源许可证
查看>>
网络之路--【第三章】——分层模型介绍及以太帧结构
查看>>