C#——实现IComparable接口、IComparableT 接口、IComparer接口、IComparerT 接口和ComparerT 类DEMO
官方文档
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相关推荐
- java 继承接口语法_java的继承、接口方面的语法及知识
继承(inheritance):一个类只能继承一个类 代码复用 继承的语法: class ChildClass extends ParentsClass{ } 父类的属性子类中都存在,只是有没有权限访 ...
- 某小公司RESTful、共用接口、前后端分离、接口约定的实践
点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 作者:邵磊 juejin.im/post/59eafab36fb9 ...
- java接口匿名内部类_JAVA技术分享:接口,内部类,匿名内部类
原标题:JAVA技术分享:接口,内部类,匿名内部类 接口: 接口中只有抽象方法,而没有非抽象方法 特点: 1:接口不能被实例化,只能通过多态的形式,让子类实例化 2:接口的子类 A:可以是具体类,但是 ...
- 接口入参形式_某小公司RESTful、共用接口、前后端分离、接口约定的实践
点击上方"后端技术精选",选择"置顶公众号" 技术文章第一时间送达! 作者:邵磊 juejin.im/post/59eafab36fb9a045076eccc3 ...
- java接口深入理解,深入理解Java接口
从java接口是什么到为什么,理解java接口,主要解决三个问题 1.java接口是什么 2.java接口为什么 3.java接口怎么用 java接口是什么 接口是方法的抽象,通过接口规定类需要实现那 ...
- 支付接口教程,详解支付宝接口(二)
支付宝的接口向来集成过程都让人觉得比较舒服,只有APP支付相对复杂,但也只是配置上复杂一些,只要清楚原理相信也不是什么难事.下面是以前介绍双钥加密原理的传送门: 支付接口教程特别篇,公钥与私钥,双钥加 ...
- wordpress 外部数据接口_WordPress Plugin API(插件接口)
简介 本文介绍的是一些为 WordPress 插件开发者提供的 API (编程语言接口),以及如何调用这些接口. 阅读本文之前,请先参考开发一个插件,以便了解一些关于插件的概况和详情.文本着重于&qu ...
- api接口参数加密_解决API接口开发安全性的四种方案
如今各种API接口层出不穷,一个API的好与不好有很多方面可以考量,其中"安全性"是一个API接口最基本也是最重要的一个特点.尤其是对于充值缴费类的API接口来说,如话费充值API ...
- java接口返回值_java后台调用接口并返回值
import java.io.BufferedReader; import java.io.DataOutputStream; import java.io.IOException; import j ...
最新文章
- php amqp扩展安装,php扩展AMQP,安装报错解决
- ARP缓存记录种类动态条目和静态条目
- php定义变量f= e怎么写,php变量怎么定义-PHP问题
- python爬虫动态加载页面_如何爬动态加载的页面?ajax爬虫你有必要掌握
- 268 missing number
- 单个基因集富集分析泡泡图绘制
- 泡沫or趋势?我们到底需要什么样的区块链?
- 通过chrome console 快速获取网页连接
- windows系统bat批处理 mysql 脚本启动关闭
- Java跨域问题以及如何使用Cors解决前后端 分离部署项目所遇到的跨域问题
- c语言双人贪吃蛇-基于图形库实现
- 强悍书单:概率与测度论+数理统计+随机过程+金融
- 手机模拟器安装证书抓包
- 两南之行,自然文艺、轻奢浪荡
- 快恢复二极管工作原理及使用
- Arduino实训-可移动机械臂(智能小车)
- 艾艾贴Mysql主从同步
- 动态优化模型/ 变分法:泛函、极值、变分
- 基于arduino、ros手柄控制机械臂
- thymeleaf 使用手册
热门文章
- 修改资料时碰到的问题,
- 申请域名的理由_申请网站名称和域名注册为商标的重要性增加了吗?原因?
- glib 2.0 arm linux,为ARM编译Glib
- java源码依赖分析_高德APP全链路源码依赖分析工程
- Tomcat 7.0~10.0zip版,安装版,其他一键式全部下载
- dnastar拼接反向互补序列_一起看流畅的python:序列构成的数组
- bilibili源码_Java开源商城源码推荐,从菜鸡到大神,永远绕不开的商城系统
- 念数字python_我是怎样利用python PIL将图片数字读出来的?
- 我的Java教程,不断整理,反复学习,记录着那些年大学奋斗的青春
- plotly使用mapbox实现地图可视化