利用泛型委托实现比较大小
利用泛型委托实现比较大小
/// <summary> /// 利用委托比较大小 /// </summary> class Program { //1.定义学生类 public class Student { public string Name { get; set; } public int Age { get; set; } public int Num { get; set; } } //2.定义比较Student的委托 public delegate bool CompareDelegate(Student first, Student second); //3.声明委托引用的方法 //比较年龄 public static bool Younger(Student s1, Student s2) => s1.Age <= s2.Age; //比较学号 public static bool NumSmaller(Student s1, Student s2) => s1.Num <= s2.Num; //4.定义比较以及输出方法 public static void SortStudent(List<Student> sList, CompareDelegate CompareMethod) { //委托实例的调用 if (CompareMethod(sList[0], sList[1]))//等价于CompareMethod.Invoke(sList[0], List[1])----反射的Invoke() { //sList[0]已经在sList[1]前面了,所以什么也不用做 } else { sList.Reverse();//交换位置 } //获取排名采用的比较方法的名称 Console.WriteLine($"\r\n按照 {CompareMethod.Method.Name} 排名:"); //打印排序后的链表 foreach (Student s in sList) Console.WriteLine($"{s.Name} {s.Age} {s.Num} "); } static void Main(string[] args) { //1.实例化学生对象 Student s1 = new Student() { Name = "Tom", Age = 10, Num = 1001 }; Student s2 = new Student() { Name = "Jerry", Age = 9, Num = 1002 }; List<Student> sList = new List<Student>(); sList.Add(s1); sList.Add(s2); //2.委托实例化以及调用 //2.1以下两种方法等价 CompareDelegate myCompareDelegate1 = new CompareDelegate(Younger);//方法的引用,不需要带(). 带() 为方法的调用 SortStudent(sList, myCompareDelegate1); //委托推断 CompareDelegate myCompareDelegate2 = Younger; SortStudent(sList, myCompareDelegate2); //2.2委托的实例化与使用,以下两种方法等价 CompareDelegate myCompareDelegate = NumSmaller;//采用比较学号的方法 SortStudent(sList, myCompareDelegate); //使用委托推断,与上两行等价 SortStudent(sList, NumSmaller); //2.3匿名委托 //匿名委託,直接把方法写在实例化代码中,不必在另一个地方定义方法 CompareDelegate anonymousCompare = delegate (Student s3, Student s4) { return s3.Num <= s4.Num; }; SortStudent(sList, anonymousCompare);//匿名方法并不是真的“没有名字”的,而是编译器为我们自动取一个名字 //2.4 Lamadbe 表达式,是对匿名委托的优化 //当匿名委托只有一行代码时,{} 和 return 可以省略 CompareDelegate LambdaCompare1 = (s4, s5) => s4.Age <= s5.Age; SortStudent(sList, LambdaCompare1); //当匿名委托为多行代码时,{} 和 return 不能省略 CompareDelegate LambdaCompare2 = (s4, s5) => { return s4.Age <= s5.Age; }; SortStudent(sList, LambdaCompare1); } }
本文来自博客园,作者:码农阿亮,转载请注明原文链接:https://www.cnblogs.com/wml-it/p/14768334.html
技术的发展日新月异,随着时间推移,无法保证本博客所有内容的正确性。如有误导,请大家见谅,欢迎评论区指正!
开源库地址,欢迎点亮:
GitHub:https://github.com/ITMingliang
Gitee: https://gitee.com/mingliang_it
GitLab: https://gitlab.com/ITMingliang
建群声明: 本着技术在于分享,方便大家交流学习的初心,特此建立【编程内功修炼交流群】,为大家答疑解惑。热烈欢迎各位爱交流学习的程序员进群,也希望进群的大佬能不吝分享自己遇到的技术问题和学习心得!进群方式:扫码关注公众号,后台回复【进群】。