ICompare接口、Sort()方法
1、接口中的方法并不实现具体功能,继承于该接口的类必须实现具体功能。
核心思想:对修改封闭,对扩展开放。
2、Sort()方法:
默认:Sort(内容)
英文:按照首字母顺序排序,首字母相同则看第二个字母;
数字:从小到大排序;
自定义 Sort(内容,排序规则)
内容按照自定义的规则排序。
host类
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleEnum { class host { [STAThread] static void Main( string [] args) { // 创建一个数组,里面放汽车名和年份 car[] arrayOfCars = new car[6] { new car( "Ford" ,1992), new car( "Fiat" ,1988), new car( "Buick" ,1932), new car( "Ford" ,1932), new car( "Dodge" ,1999), new car( "Honda" ,1977) }; Console.WriteLine( "排序前\n" ); foreach (car c in arrayOfCars) Console.WriteLine(c.Make + "\t\t" + c.Year); Console.WriteLine( "\Sort默认正向排序 \n" ); Array.Sort(arrayOfCars); foreach (car c in arrayOfCars) Console.WriteLine(c.Make + "\t\t" + c.Year);<br> Console.WriteLine( "\Sort 按年份正向排序 )\n" ); Array.Sort(arrayOfCars, car.sortYearAscending()); foreach (car c in arrayOfCars) Console.WriteLine(c.Make + "\t\t" + c.Year); Console.WriteLine( "\Sort 按汽车名正向排序 \n" ); Array.Sort(arrayOfCars, car.sortMakeDescending()); foreach (car c in arrayOfCars) Console.WriteLine(c.Make + "\t\t" + c.Year); Console.WriteLine( "\Sort 按汽车名反向排序 \n" ); Array.Sort(arrayOfCars, car.sortYearDescending()); foreach (car c in arrayOfCars) Console.WriteLine(c.Make + "\t\t" + c.Year); Console.ReadLine(); } } } |
Car类
using System; using System.Collections; namespace ConsoleEnum { public class car : IComparable { // 嵌套类:类中的类。 // 按年升序 private class sortYearAscendingHelper : IComparer { //实现接口定义的方法 int IComparer.Compare( object a, object b) { car c1 = (car)a; car c2 = (car)b; if (c1.year > c2.year) return 1; if (c1.year < c2.year) return -1; else return 0; } } // 按年降序 private class sortYearDescendingHelper : IComparer { //实现接口定义的方法 int IComparer.Compare( object a, object b) { car c1 = (car)a; car c2 = (car)b; if (c1.year < c2.year) return 1; if (c1.year > c2.year) return -1; else return 0; } } // 按汽车名字母降序 private class sortMakeDescendingHelper : IComparer { //实现接口定义的方法 int IComparer.Compare( object a, object b) { car c1 = (car)a; car c2 = (car)b; return String.Compare(c2.make, c1.make); } } private int year; private string make; //构造函数 public car( string Make, int Year) { make = Make; year = Year; } //属性 public int Year { get { return year; } set { year = value; } } public string Make { get { return make; } set { make = value; } } // 实现IComparable接口来提供默认的排序顺序的对比。 public int IComparable.CompareTo( object obj) { car c = (car)obj;<br> //调用了C#中封装的类,详情见下一篇 return String.Compare( this .make, c.make); } <br> //因为这里使用了嵌套类,把嵌套类包裹到方法中方便调用(类名.方法名) public static IComparer sortYearAscending() {<br> //调用了上面的类 return (IComparer) new sortYearAscendingHelper(); } public static IComparer sortYearDescending() {<br> //调用了上面的类 return (IComparer) new sortYearDescendingHelper(); } public static IComparer sortMakeDescending() {<br> //调用了上面的类 return (IComparer) new sortMakeDescendingHelper(); } } } |
树立目标,保持活力,gogogo!
标签:
C#基础
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具