gpt4 book ai didi

c# - 继承调用错误的 Equals() 方法

转载 作者:行者123 更新时间:2023-11-30 20:30:19 25 4
gpt4 key购买 nike

我对重写方法 Equals 有疑问。

public class Asset
{
public string Name { get; set; }

public override bool Equals(object obj)
{
Asset oAss = (Asset)obj;
return Name == oAss.Name;
}
}

public class Mortage : Asset
{
public int Amount { get; set; }

public override bool Equals(object obj)
{
Mortage oMor = (Mortage)obj;
return this.Name == oMor.Name && this.Amount == oMor.Amount;
}
}

static void Main(string[] args)
{
Mortage m1 = new Mortage();
Mortage m2 = new Mortage();

m1.Name = "House";
m1.Amount = 2000;

m2.Name = "Castle";
m2.Amount = 200000;


Asset a1 = m1;
Asset a2 = m2;


m1.Equals(m2);
a1.Equals(a2);

}

为什么当我调用方法 a1.Equals(a2) 时调用的是 Mortage.Equals() 而不是 Asset.Equals( )?

最佳答案

因为 m1a1 仍然是 Mortgage 类型的同一个实例。

在这种情况下,类型系统不关心变量类型是什么,它使用实际类型来寻找符合签名bool(object)的最高派生方法,仍然是Mortgage.Equals 因为它覆盖 Asset 中的方法。标记 Mortgage.Equals 方法 new 将使该代码调用 Asset.Equals

关于c# - 继承调用错误的 Equals() 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45008470/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com