我读过几篇文章
使用IEquatable的参考类型减少了投射的使用
有人可以提供令人信服的例子。
答案 0 :(得分:2)
只需在Dario's explanation之后添加一个简单示例:
class Person : IEquatable<Person>
{
public string Name { get; set; }
public override bool Equals(object obj)
{
if (obj is Person)
{
Person other = (Person)obj;
// check equality
}
return base.Equals(obj);
}
#region IEquatable<Person> Members
public bool Equals(Person other)
{
// check equality without cast
}
#endregion
}
注意:这只是一个小片段,显示了为什么这会避免cast
。要获得正确的实施,请检查docs:
如果你实现IEquatable&lt;(Of &lt;(T&gt;)&gt;),你也应该覆盖 基类实现 Object .. ::。Equals(Object)和 GetHashCode以便他们的行为 与那个一致 IEquatable&lt;(Of&lt;(T&gt;)&gt;).. ::。Equals 方法
答案 1 :(得分:1)
你知道this article吗? 它说
如果您想拥有自己的实现,可以覆盖此方法。由于Equals方法具有Object类型的参数,因此需要进行强制转换才能访问特定于类的成员。
这是IEquatable接口的用武之地.IEququable是.NET 2.0中的一个新的通用接口,它允许您像System.Object.Equals方法一样执行,但不必执行强制转换。因此,在实现此接口时,您可以减少强制转换的数量,这对性能来说是一件好事。特别是在使用泛型集合时,通用集合在其某些方法(List.Equals(),List.IndexOf(),List.LastIndexOf(),...)中使用了这种相等比较。
由于它的泛型类型参数,IEquatable<T>
可以在编译时提供类型检查,因此您不必使用object
进行强制转换和后期绑定。
答案 2 :(得分:0)
我相信你的答案就在这里,http://msdn.microsoft.com/en-us/library/ms131190.aspx。阅读页面上的备注部分。