首页 > 编程语言 >c# 类重写Equal,GetHashCode,实现IComparable,IComparable<T>

c# 类重写Equal,GetHashCode,实现IComparable,IComparable<T>

时间:2024-01-06 20:44:06浏览次数:37  
标签:return IComparable c# Equal Equals other ls Student public

/// <summary>
/// Array,List<T> 排序都依赖于IComparable
/// </summary>
public class Student : IEquatable<Student>,IComparable, IComparable<Student>
{
public int Id { get; set; }
public string Name { get; set; }

public Student()
{
}

public Student(int id, string name) : this()
{
this.Id = id;
this.Name = name;
}

/// <summary>
/// 实现IEquatable<T>接口的Equals
/// </summary>
/// <param name="other"></param>
/// <returns></returns>
public bool Equals(Student other)
{
if (other is null)
return false;

return this.Id == other.Id && this.Name == other.Name;
}

/// <summary>
/// 重写Object基类的Equals
/// </summary>
/// <param name="obj"></param>
/// <returns></returns>
public override bool Equals(object obj)
{
var other = obj as Student;
return this.Equals(other);
}

/// <summary>
/// 重写Object基类的GetHashCode
/// </summary>
/// <returns></returns>
public override int GetHashCode()
{
return Tuple.Create(this.Id, this.Name).GetHashCode();
}

public int CompareTo(Student other)
{
return this.Id - (other is null ? 0 : other.Id);
}

public int CompareTo(object obj)
{
return CompareTo(obj as Student);
}

/// <summary>
/// 重载==运算符
/// </summary>
/// <param name="ls"></param>
/// <param name="rs"></param>
/// <returns></returns>
public static bool operator ==(Student ls, Student rs)
{
return (ls is null && rs is null) || ls is not null && ls.Equals(rs) || rs is not null && rs.Equals(ls);
}

/// <summary>
/// 重载!=运算符
/// </summary>
/// <param name="ls"></param>
/// <param name="rs"></param>
/// <returns></returns>
public static bool operator !=(Student ls, Student rs)
{
return !(ls == rs);
}
}

标签:return,IComparable,c#,Equal,Equals,other,ls,Student,public
From: https://www.cnblogs.com/sunyankun/p/17949540

相关文章

  • Synchronized
    SynchronizedC++多线程编程的痛点-锁与数据是分开的structRequestHandler{RequestQueuerequestQueue_;SharedMutexrequestQueueMutex_;std::map<std::string,Endpoint>requestEndpoints_;SharedMutexrequestEndpointsMutex_;HandlerStateworkState......
  • docker_compose
    dockercompose编排服务DockerCompose是一个用于定义和运行多个Docker容器的工具。通过编写一个YAML文件来描述应用的各个服务,并使用docker-compose命令来启动、停止和管理这些服务。以下是编排Docker服务的常见步骤:创建一个docker-compose.yml文件,该文件用于描述你的......
  • docker_Portainer
    DockerPortainer是一个用于管理Docker容器的图形化界面工具。下面是使用DockerPortainer的一些步骤:安装Docker:首先需要在你的系统上安装Docker。根据不同的操作系统,可以参考Docker官方文档进行安装。下载Portainer镜像:使用以下命令从DockerHub上下载Portainer镜像:dockerpullpo......
  • docker_cig
    Docker上安装通过dockerstats命令可以很方便的查看当前宿主机上所有容器的CPU、内存、网络流量等数据,可以满足一些小型应用。但是dockerstats统计结果只能是当前宿主机的全部容器,数据资料是实时的,没有地方存储、没有健康指标过线预警等功能。CAdvisor(监控收集)+InfluxDB(存储......
  • 依赖注入(Dependency Injection)
    基本概念例子很简单,注入的方式也有很多方法,包括构造注入、set注入等方法,在此基础上应用依赖倒置(DependencyInversionPrinciple)原则,SOLID原则之一。类A依赖类B的抽象接口,而不面向具体类B编程,实现类A与类B的解耦。上述将依赖类的构造逻辑与业务逻辑分离,类A依赖类B的抽象接口,那么接......
  • 【设计模式】单例模式——单例模式的懒汉式和DCL式实现
    懒汉式为了解决饿汉式单例带来的内存浪费问题,出现了懒汉式单例的写法,代码如下:publicclassSingleton{privatestaticSingletoninstance=null;privateSingleton(){}publicstaticSingletongetInstance(){if(instance==null){insta......
  • C++ Qt开发:Charts与数据库组件联动
    Qt是一个跨平台C++图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍Charts组件与QSql数据库组件的常用方法及灵活运用。在之前的文章中详细介绍了关于QCharts绘图组件......
  • 刷题笔记——单向链表(C++)
    206.反转链表-力扣(LeetCode)给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。解题思路三指针。temp指针用于存储当前节点的下一节点,pre指针用于存储当前节点反转后指向的新节点。具体操作如下:反转过程:代码实现classSolution{public:ListNode*reverseList(Li......
  • BegCode生成第一个应用,一键走起!
    BegCode生成应用的代码过程非常简单,只需要简单的几个问题就可以了。环境要求BegCode要求Node和Java环境,所以你首先要安装相应的工具。JDK版本1.8和17以上可选,Node.js需要18.18或20.6以上的版本。安装BegCodenpminstall-ggenerator-begcode运行并配置1.运行命令begcode样子有点......
  • Vuex与Vuex-Class的底层原理简单实现
    vuex-class是在class-component中使用vuex的辅助工具。学习任何技术栈的使用,最透彻的掌握方法就是去简单实现一下,下面先简单实现一下vuex,然后基于我们自己实现的vuex再去实现一个vuex-class,彻底搞定vuex-class的使用。首先回忆一下vuex的使用(配置)方法,首先我们需要在某个位置执行Vue......