为什么我必须覆盖虚方法而不是使用多态?

Lai*_*uan 0 c# polymorphism

我有一个名为的班级Employee.现在我尝试定义它的Equals方法,但我只想接受Employeeas参数.

所以我写这段代码:

class MainClass
    {
        public static void Main (string[] args)
        {
            Employee e = new Employee();
            Employee e2 = new Employee();
            Console.WriteLine(Equals(e, e2));
        }

        public static Employee CreateEmployee()
        {
            return new Employee();
        }
    } 

    class Employee
    {
        public int ID;
        public bool Equals (Employee e)
        {
            Console.WriteLine("Compare!");
            return ID == e.ID;
        }
    }
Run Code Online (Sandbox Code Playgroud)

但它不起作用!控制台输出:

false
Run Code Online (Sandbox Code Playgroud)

不是我的预期:

Compare!
true
Run Code Online (Sandbox Code Playgroud)

看起来我必须写public override bool Equals (Object),但为什么呢?C#不能选择按参数类型调用的方法吗?

Adr*_*der 5

尝试将代码更改为

Console.WriteLine(e.Equals(e2)); 
Run Code Online (Sandbox Code Playgroud)

正如您所拥有的那样,它使用的是Object.Equals方法(对象,对象)