c# - 如何重载“==”运算符来确定两个 ID 号是否相同?
问题描述
我需要编写一个方法,将两个员工对象作为输入参数并比较它们的 ID 以确定它们是否匹配。
目前还不完整;但到目前为止,我有一个 Employee 类,它从“Person”类继承名字和姓氏属性,并将 ID 作为自己的属性。我正在员工文件中编写该方法,并且已经在我的程序中实例化了 2 个示例员工。至于重载==,我遇到了一个错误,上面写着“Employee”定义运算符==但没有覆盖Object.Equals。”它还说我需要定义“!=”,但我很困惑当它甚至没有考虑到这个方法时,如何设置 != 重载。
我见过两种比较方法,一种返回真或假,另一种只是将“匹配”写入控制台。其中任何一个都适用于我的目的,但我无法找到解决这些错误的方法,或者在这种情况下如何更改代码以确定 2 个员工 ID 之间的匹配。下面是我的代码;对于可能出现的问题,我将不胜感激!(我有一种感觉,它可能很不对劲)。我也不确定如何调用该方法,但我目前正在尝试弄清楚。
程序文件:
namespace OperatorOverload
{
class Program
{
static void Main(string[] args)
{
Employee example = new Employee();
example.FirstName = "Kitty";
example.LastName = "Katz";
example.ID = 24923;
Employee example2 = new Employee();
example2.FirstName = "John";
example2.LastName = "Dudinsky";
example2.ID = 39292;
Console.ReadLine();
}
}
}
员工等级:
namespace OperatorOverload
{
class Employee : Person
{
public int ID { get; set; }
public static bool operator==(Employee employee, Employee employee2)
{
if (employee.ID == employee2.ID)
return true;
else
return false;
}
}
}
人物类:
namespace OperatorOverload
{
public class Person
{
public string FirstName { get; set; }
public string LastName { get; set; }
}
}
解决方案
您还需要覆盖该Equals
方法:
public override bool Equals(Object Obj)
{
Person person = obj as Person;
if(person == null)
return false;
return this.ID.Equals(person.ID);
}
微软的建议:
每当您实现 Equals 方法时,就实现 GetHashCode 方法。这使 Equals 和 GetHashCode 保持同步。
每当您实现相等运算符 (==) 时,重写 Equals 方法,并使它们执行相同的操作。
推荐阅读
- c - 当 SSL_read() 返回 WANT_READ 时调用 SSL_write()
- html - Img Src 位置 HTML
- database - 将 mikrotik 路由器热点默认 login.html 连接到外部数据库
- api - Google Analytics API 权限不足
- html - 如何在不使用 Opacity 属性的情况下将透明背景颜色应用于分区
- apache-spark - Spark MlLib (Java) 中的分类和数值特征
- java - Android 插件 3.0.0+ 数据绑定错误?
- apache-spark - Spark 中的 Drools - 性能
- php - 计算wordpress帖子的数量并回应它
- machine-learning - 如何在python中提取随机森林的决策规则