首页 > 解决方案 > 如何重载“==”运算符来确定两个 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; }      
    }
}

标签: c#overloading

解决方案


您还需要覆盖该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 方法,并使它们执行相同的操作。


推荐阅读