メソッドEquals
のオーバーライドに関する質問があります。継承が間違った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()
のですか?
Equalsメソッドがオーバーライドされているためです。 – Maarten
'Mortgage'でメソッドをオーバーライドしたため、' a1'が*を参照するオブジェクトの実行時の型は '' Mortgage''です。 –