官方文档

IComparable 接口:https://docs.microsoft.com/zh-cn/dotnet/api/system.icomparable?view=netframework-4.8

IComparable<T> 接口:https://docs.microsoft.com/zh-cn/dotnet/api/system.icomparable-1?view=netframework-4.8

IComparer 接口:https://docs.microsoft.com/zh-cn/dotnet/api/system.collections.icomparer?view=netframework-4.8

IComparer<T> 接口:https://docs.microsoft.com/zh-cn/dotnet/api/system.collections.generic.icomparer-1?view=netframework-4.8

Comparer<T> 类:https://docs.microsoft.com/zh-cn/dotnet/api/system.collections.generic.comparer-1?view=netframework-4.8

源代码

using System;
using System.Collections.Generic;
using System.Collections;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using static System.Console;namespace ConsoleApp5
{public class AnimalComparer : IComparer//java compartor{public int Type { get; set; }//0-Name比较,1-Weight比较public int Compare(object x, object y)//>0: x > y{if (!(x is Animal && y is Animal))throw new ArgumentException("   ");Animal ax = x as Animal;//(Animal)x;Animal ay = (Animal)y;switch (Type){case 0:return ax.Name.CompareTo(ay.Name);//break;case 1:return ax.Weight - ay.Weight;//break;default:return 0;}                }}public abstract class Animal : IComparable{protected string name;public string Name{get { return name; }set { name = value; }}public Animal(){name = "The animal with no name";}public Animal(string newName){name = newName;}public void Feed() => WriteLine($"{name} has been fed.");public override bool Equals(object obj){if (obj is Animal){Animal a = (Animal)obj;if (Name == a.Name)return true;elsereturn false;}return false;}public int Weight { get; set; }public int CompareTo(object obj)//>0:this > obj{if (obj is Animal){Animal ani = (Animal)obj;//return Name.CompareTo(ani.Name);return Weight - ani.Weight;}elsethrow new ArgumentException("错误参数"); }public static bool operator ==(Animal op1, Animal op2){if (op1.Name == op1.Name)return true;elsereturn false;}public static bool operator !=(Animal op1, Animal op2){if (op1.Name != op1.Name)return true;elsereturn false;}public static bool operator >(Animal op1, Animal op2){if (op1.Name.CompareTo(op1.Name) > 0)return true;elsereturn false;}public static bool operator <(Animal op1, Animal op2){if (op1.Name.CompareTo(op1.Name) < 0)return true;elsereturn false;}}public class Cow : Animal{public void Milk() => WriteLine($"{name} has been milked.");public Cow(string newName) : base(newName) { }}public class Chicken : Animal{public void LayEgg() => WriteLine($"{name} has laid an egg.");public Chicken(string newName) : base(newName) { }}class Program{static void Main(string[] args){Cow myCow = new Cow("Lea");Chicken myChicken = new Chicken("Noa");AnimalComparer ac = new AnimalComparer { Type = 0 };ArrayList animalArrayList = new ArrayList();//ArrayList默认认为其元素是object类型的animalArrayList.Add(myCow);//集合的容量能够自动增长animalArrayList.Add(myChicken);//animalArrayList.Add(100);//装箱//animalArrayList.Add("abc"); animalArrayList.Sort();//按名字排序animalArrayList.Sort(ac);//根据指定比较器来比较object o1 = animalArrayList[0];if (o1.GetType() == typeof(Cow))//object类里存储了类型信息{Console.WriteLine("Animal");((Animal)o1).Feed();}if (o1 is Animal)Console.WriteLine("o1 is an animal");if (o1 is Cow)Console.WriteLine("o1 is a cow");((Animal)animalArrayList[0]).Feed();//取出数据后,默认是object类型,需转换((Chicken)animalArrayList[1]).LayEgg();foreach (Animal item in animalArrayList) { WriteLine(item.Name); }//会执行自动转换//(int)animalArrayList[2]//ArrayList = List<object>List<Animal> animalList = new List<Animal>();animalList.Add(myCow);//集合的容量能够自动增长animalList.Add(myChicken);animalList[0].Feed();//取出数据后,默认是Animal类型,无需转换((Chicken)animalList[1]).LayEgg();//但如果要作为子类对象使用,需要进行转换foreach (Animal myAnimal in animalArrayList) { }}}}

运行结果

参考文章

https://blog.csdn.net/Maybe_ch/article/details/81359408

https://blog.csdn.net/cyh1992899/article/details/52782065

https://blog.csdn.net/weixin_34274029/article/details/92958493

https://blog.csdn.net/allenjy123/article/details/7223047

https://blog.csdn.net/weixin_34189116/article/details/86345383

C#——实现IComparable接口、IComparableT 接口、IComparer接口、IComparerT 接口和ComparerT 类DEMO相关推荐

  1. java 继承接口语法_java的继承、接口方面的语法及知识

    继承(inheritance):一个类只能继承一个类 代码复用 继承的语法: class ChildClass extends ParentsClass{ } 父类的属性子类中都存在,只是有没有权限访 ...

  2. 某小公司RESTful、共用接口、前后端分离、接口约定的实践

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 作者:邵磊 juejin.im/post/59eafab36fb9 ...

  3. java接口匿名内部类_JAVA技术分享:接口,内部类,匿名内部类

    原标题:JAVA技术分享:接口,内部类,匿名内部类 接口: 接口中只有抽象方法,而没有非抽象方法 特点: 1:接口不能被实例化,只能通过多态的形式,让子类实例化 2:接口的子类 A:可以是具体类,但是 ...

  4. 接口入参形式_某小公司RESTful、共用接口、前后端分离、接口约定的实践

    点击上方"后端技术精选",选择"置顶公众号" 技术文章第一时间送达! 作者:邵磊 juejin.im/post/59eafab36fb9a045076eccc3 ...

  5. java接口深入理解,深入理解Java接口

    从java接口是什么到为什么,理解java接口,主要解决三个问题 1.java接口是什么 2.java接口为什么 3.java接口怎么用 java接口是什么 接口是方法的抽象,通过接口规定类需要实现那 ...

  6. 支付接口教程,详解支付宝接口(二)

    支付宝的接口向来集成过程都让人觉得比较舒服,只有APP支付相对复杂,但也只是配置上复杂一些,只要清楚原理相信也不是什么难事.下面是以前介绍双钥加密原理的传送门: 支付接口教程特别篇,公钥与私钥,双钥加 ...

  7. wordpress 外部数据接口_WordPress Plugin API(插件接口)

    简介 本文介绍的是一些为 WordPress 插件开发者提供的 API (编程语言接口),以及如何调用这些接口. 阅读本文之前,请先参考开发一个插件,以便了解一些关于插件的概况和详情.文本着重于&qu ...

  8. api接口参数加密_解决API接口开发安全性的四种方案

    如今各种API接口层出不穷,一个API的好与不好有很多方面可以考量,其中"安全性"是一个API接口最基本也是最重要的一个特点.尤其是对于充值缴费类的API接口来说,如话费充值API ...

  9. java接口返回值_java后台调用接口并返回值

    import java.io.BufferedReader; import java.io.DataOutputStream; import java.io.IOException; import j ...

最新文章

  1. php amqp扩展安装,php扩展AMQP,安装报错解决
  2. ARP缓存记录种类动态条目和静态条目
  3. php定义变量f= e怎么写,php变量怎么定义-PHP问题
  4. python爬虫动态加载页面_如何爬动态加载的页面?ajax爬虫你有必要掌握
  5. 268 missing number
  6. 单个基因集富集分析泡泡图绘制
  7. 泡沫or趋势?我们到底需要什么样的区块链?
  8. 通过chrome console 快速获取网页连接
  9. windows系统bat批处理 mysql 脚本启动关闭
  10. Java跨域问题以及如何使用Cors解决前后端 分离部署项目所遇到的跨域问题
  11. c语言双人贪吃蛇-基于图形库实现
  12. 强悍书单:概率与测度论+数理统计+随机过程+金融
  13. 手机模拟器安装证书抓包
  14. 两南之行,自然文艺、轻奢浪荡
  15. 快恢复二极管工作原理及使用
  16. Arduino实训-可移动机械臂(智能小车)
  17. 艾艾贴Mysql主从同步
  18. 动态优化模型/ 变分法:泛函、极值、变分
  19. 基于arduino、ros手柄控制机械臂
  20. thymeleaf 使用手册

热门文章

  1. 修改资料时碰到的问题,
  2. 申请域名的理由_申请网站名称和域名注册为商标的重要性增加了吗?原因?
  3. glib 2.0 arm linux,为ARM编译Glib
  4. java源码依赖分析_高德APP全链路源码依赖分析工程
  5. Tomcat 7.0~10.0zip版,安装版,其他一键式全部下载
  6. dnastar拼接反向互补序列_一起看流畅的python:序列构成的数组
  7. bilibili源码_Java开源商城源码推荐,从菜鸡到大神,永远绕不开的商城系统
  8. 念数字python_我是怎样利用python PIL将图片数字读出来的?
  9. 我的Java教程,不断整理,反复学习,记录着那些年大学奋斗的青春
  10. plotly使用mapbox实现地图可视化