【发布时间】:2020-05-31 20:13:06
【问题描述】:
我在我的一个程序中编写了这些代码行,用于将类的两个实例之间的相等比较从它们的引用更改为它们的值:
public interface IEquatable<Clock>
{
}
public bool Equals(Clock theObj)
{
if (theObj == null)
{
return false;
}
if (theObj.ToString() == this.ToString())
{
return true;
}
else
{
return false;
}
}
public override bool Equals(object obj)
{
if (obj == null)
{
return false;
}
Clock clck = obj as Clock;
if (clck == null)
{
return false;
}
else
{
return Equals(clck);
}
}
public override int GetHashCode()
{
return Hours;
}`
现在,当我尝试在不同解决方案中的不同项目中使用“Equals(T)”方法比较一个类的两个实例时,它会比较它们的值而不是它们的引用。
覆盖项目中的方法会影响其他项目中的方法吗?
我的完整代码是: `使用系统; 使用 System.Diagnostics.Contracts; 使用 System.Runtime.InteropServices.WindowsRuntime; 使用 System.Security.Cryptography.X509Certificates;
public class Clock
{
public int Minutes;
public int Hours;
public interface IEquatable<Clock>
{
}
public bool Equals(Clock theObj)
{
if (theObj == null)
{
return false;
}
if (theObj.ToString() == this.ToString())
{
return true;
}
else
{
return false;
}
}
public override bool Equals(object obj)
{
if (obj == null)
{
return false;
}
Clock clck = obj as Clock;
if (clck == null)
{
return false;
}
else
{
return Equals(clck);
}
}
public override int GetHashCode()
{
return Hours;
}
public override string ToString()
{
if (Hours < 10)
{
if (Minutes < 10)
{
return "0" + Hours + ":0" + Minutes;
}
else
{
return "0" + Hours + ":" + Minutes;
}
}
else
{
if (Minutes < 10)
{
return Hours + ":0" + Minutes;
}
else
{
return Hours + ":" + Minutes;
}
}
}
public Clock(int hours, int minutes)
{
while (minutes > 59 || minutes < 0)
{
if (minutes > 59)
{
minutes -= 60;
hours++;
}
if (minutes < 0)
{
minutes += 60;
hours--;
}
}
while (hours > 23 || hours < 0)
{
if (hours > 23)
{
hours -= 24;
}
if (hours < 0)
{
hours += 24;
}
}
Hours = hours;
Minutes = minutes;
}
public Clock Add(int minutesToAdd)
{
var res = new Clock(Hours , Minutes + minutesToAdd);
return res;
}
public Clock Subtract(int minutesToSubtract)
{
var res = new Clock(Hours , Minutes - minutesToSubtract);
return res;
}}
感谢您的宝贵时间!
【问题讨论】:
-
想象一下它改写成这样:“如果我在库 A 中编写一个类/方法,那么该类/方法可以在库 B 中使用吗?” - Equals 只是以某种类型定义(或覆盖)的方法,因此适用相同的规则。
-
另外,代码示例顶部显示的接口定义是..不正确的。重新验证如何实现接口,并确保发布编译代码。
标签: c# class methods overriding equals