夜光序言:

如果你总是抓着悲伤不肯放手,那么你永远都不会真正地快乐。

正文:

lambda表达式:更简单的使用代理

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace 案例3
{class Stu /*: IComparable*/{//我们先定义两个属性public int id;public string name;public override string ToString(){return string.Format("id={0},name={1}", id, name);}}//夜光:如果我们自己写一个顺序表,能否实现跟list.sort一样的功能(按照delegate指定的方法来进行排序)class StuMgr{private Stu[] stuList = new Stu[111];private int n = 0;public void Add(Stu stu){if (n >= stuList.Length)throw new InvalidOperationException("数组异常"); stuList[n] = stu;n++;}//夜光:我们定义一个排序的方法public void Sort(){//最简单的冒泡排序for(int i = 0; i < n - 1; i++){for(int j = i + 1; j < n; j++){if(stuList[i].id > stuList[j].id){Stu tmp = stuList[i];stuList[i] = stuList[j];stuList[j] = tmp;}}}}// 划重点,下面// 如果返回值大于0,则表示s1在s2前面,反之亦然public delegate int CompareDelegate(Stu s1, Stu s2);//这样,我们的代理声名就结束了public void Sort(CompareDelegate cd) //cd,取首字母{//最简单的冒泡排序for (int i = 0; i < n - 1; i++){for (int j = i + 1; j < n; j++){/*if (stuList[i].id > stuList[j].id)*/if(cd(stuList[i],stuList[j]) > 0) //如果大于0的话,则说明i在j前面{Stu tmp = stuList[i];stuList[i] = stuList[j];stuList[j] = tmp;}}}}public void Print(){for(int i = 0; i < n; i++){Console.WriteLine(stuList[i]);}}}class Program{//下面这个:代理定义了一个方法的原型//返回值必须是int,有两个参数 x<y// 表示x在前  , x == y 两者在同一位置, x>y 表示y在前/*public delegate int Comparison<in T>(T x, T y);*///代理如何改为具体的方法//1.去掉delegate关键字  并且增加static关键字//2.把T类型变成实际要比较的类型//3.实现代理的方法体,按照文档的规范要求public static int CompareById(Stu x, Stu y) //定义一个方法{return x.id - y.id; //如果是大于0的,表示x在前,如果小于0,表示y在前}//下面一个实现按照name的比较public static int CompareByName(Stu x, Stu y) //定义一个方法{return x.name.CompareTo(y.name); //根据name来进行排序}static void Main(string[] args){Stu s1 = new Stu() { id = 9, name = "萧炎" };Stu s2 = new Stu() { id = 2, name = "林动" };Stu s3 = new Stu() { id = 8, name = "唐三" };//夜光:我们创建一个list#region delegate 的创建//首先new一个学生管理器出来StuMgr sm = new StuMgr();sm.Add(s1);sm.Add(s2);sm.Add(s3);//排序的规则引用sm.Sort();//lambda表达式用了编译器类型推断// 语法格式(参数列表) => {方法体}sm.Sort((x, y) =>{//写方法体return x.id - y.id; //如果是大于0的,表示x在前,如果小于0,表示y在前});/*sm.Sort(CompareById);   //需要给这两个方法进行重载*//*sm.Sort(CompareByName);*/sm.Print();#endregion#region delegate 的使用/* List<Stu> sa = new List<Stu>();sa.Add(s1);sa.Add(s2);sa.Add(s3);  //我们把元素,三个加入进去//下面这个,要传入进去方法的名称*//*sa.Sort(CompareByName);*//* //想要使用这个比较器,需要实现接口//为什么上面会报错,因为这个方法有点问题,需要加入static关键字switch (Console.ReadKey().Key){case ConsoleKey.D1:sa.Sort(CompareById);break;case ConsoleKey.D2:sa.Sort(CompareByName);break;}//写一个循环,输出看一下for (int i = 0; i < sa.Count; i++){Console.WriteLine(sa[i]); //需要重写这个类的方法}*/#endregionConsole.ReadLine();}}
}

看了上面的介绍,千万不要混淆,记住代理里面存放一个对象,这个对象是一个方法

夜光带你走进C# 游戏开发等(九十二)擅长的领域相关推荐

  1. 夜光带你走进C# 游戏开发等(七十九)擅长的领域

    夜光序言: 随着时间的流逝,年龄在增长,表面是如此,可内心的成长,那才是最重要的,只有这样活着才会变得更加美好,内心的成长是每个人一生的追求,我向往内心的成长,成熟 正文: using System; ...

  2. 夜光带你走进JavaScript(五十八)擅长的领域

    夜光序言: 人生旅途上,横竖都是路,决定今天的不是今天,而是昨天对人生的态度:决定明天的不是明天,而是今天对事业的作为.我们的今天由过去决定,我们的明天由今天决定~~ 正文: JavaScript 计 ...

  3. 夜光带你走进JavaScript(四十六)擅长的领域

    夜光序言: 从一开始以为这个世界上只有自己,到明白自己的天赋其实只够做一个不错的普通人. 然后人就长大了 正文: 事件冒泡或事件捕获? 事件传递有两种方式:冒泡与捕获. 事件传递定义了元素事件触发的顺 ...

  4. 夜光带你走进Vue.js(三十)擅长的领域

    夜光序言: 清晨的阳光温暖而和煦,洒在脸上,让人没有心思去考虑烦心的事情,只想沐浴在光芒中放空自己.新的一天又开始了,亲爱的人啊 正文:创建一个简单的导航菜单 养兵千日用兵一时,学的东西要灵活使用 & ...

  5. 夜光带你走进 前端工程师(四十二 jS )

    夜光序言: 孤高所以至高. 所谓真正的英雄就是一个人.因为孤高所以强大. 没有持有羁绊也就是说没有必须守护的东西.必须守护的东西换言之就是弱点. 因此没有弱点.没有必须守护的东西.和别人没有联系的人才 ...

  6. 夜光带你走进C# winform电气单片机(二十七)擅长的领域

    夜光序言: 春光不晓痴心做,秋风仍知落叶殇,客来客往,大雁回翔,千山几时诉离缘?红尘渡,身缘几凡客?何知,一去经年无旧痕,为度清寒. 正文:

  7. 带你走进整个游戏行业《下》

    接上篇:带你走进整个游戏行业<上> 游戏研发公司工作分类 1.程序 1.1 客户端:主要负责界面的逻辑处理和服务器进行通讯,游戏App中看到的都是出自客户端的,是面向玩家的,做的任何一个功 ...

  8. 《MFC游戏开发》笔记二 建立工程、调整窗口

    本系列文章由七十一雾央编写,转载请注明出处. http://blog.csdn.net/u011371356/article/details/9300383 作者:七十一雾央 新浪微博:http:// ...

  9. 游戏开发入门(二)游戏中的设计模式

    视频链接:游戏开发入门(二)游戏中的设计模式(3节课 时常:约2小时40分钟) 该视频主要围绕游戏中常见的设计模式展开讲解并实践,需要大家多多实践与理解 笔记与总结(请先学习视频内容): 1.有必要深 ...

最新文章

  1. CNN可视化最新研究方法进展(附结构、算法)
  2. 【译】SQL Server误区30日谈-Day1-正在运行的事务在服务器故障转移后继续执行
  3. 一份值得收藏的,互联网电商购物车架构演变案例
  4. Gemfile.lock应该包含在.gitignore中吗?
  5. Verilog篇(三)仿真原理
  6. Android webkit 事件传递流程
  7. 关闭rdlc报表打印预览后,关闭客户端,抛出异常“发生了应用程序级的异常 将退出”...
  8. mongodb学习(六)索引
  9. Oracle ——概述 Oracle 5 步调优方法论
  10. make *** 没有指明目标并且找不到 makefile。 停止。_“关系红利”时代《请停止无效社交》,关键朋友是你的价值选择...
  11. linux网络子系统分析(四)—— INET连接建立API分析之connect/accept
  12. [IOS]——播放器AVPlayer的实现
  13. 卡通飞翔的牛动画特效
  14. 西湖论剑2020writeup
  15. 如何用命令行和carbite c++生成sis文件
  16. 小米误删userdata分区,userdata分区无法还原,安卓误删分区,且能进twrp,刷机卡米的情况,重新分区教程
  17. 机械螺旋缠绕法管道非开挖修复
  18. 阿里在人工智能发展治理方向的思考和实践
  19. iOS 苹果开发者账号--个人账号、公司账号、企业账号的区别
  20. SSM框架的介绍与搭建

热门文章

  1. 【笔记】微信小程序基础
  2. JAVA设计模式之责任链模式
  3. HTTP请求的交互过程和常见的相应状态码
  4. calltransaction弹出新的窗口_SAP刘梦_新浪博客
  5. vue-baidu-map百度地图搜索功能,点击进行标点,获取经纬度坐标,百度地图使用黑色主题
  6. 【控制】拉普拉斯拉氏变换原理分解理解
  7. html5学习记录总结
  8. 无标注数据是鸡肋还是宝藏?阿里工程师这样用它
  9. USB摄像头预览识别二维码
  10. brew-cask介绍