我一直在阅读文章并理解一定程度的接口,如果我想改正我自己的自定义Equals方法,似乎我可以在不实现IEquatable接口的情况下做到这一点.一个例子.
using System;
using System.Collections;
using System.ComponentModel;
namespace ProviderJSONConverter.Data.Components
{
public class Address : IEquatable<Address>
{
public string address { get; set; }
[DefaultValue("")]
public string address_2 { get; set; }
public string city { get; set; }
public string state { get; set; }
public string zip { get; set; }
public bool Equals(Address other)
{
if (Object.ReferenceEquals(other, null)) return false;
if (Object.ReferenceEquals(this, other)) return true;
return (this.address.Equals(other.address)
&& this.address_2.Equals(other.address_2)
&& this.city.Equals(other.city)
&& this.state.Equals(other.state)
&& this.zip.Equals(other.zip));
}
}
}
现在如果我不实现接口并离开:IEquatable< Address>在代码之外,似乎应用程序运行完全相同.因此,我不清楚为什么要实现这个界面?我可以在没有它的情况下编写我自己的自定义Equals方法,断点将仍然触及方法并返回相同的结果.
任何人都可以帮我解释一下这个吗?我挂断了为什么包含“IEquatable< Address>”在调用Equals方法之前.
解决方法:
Now if i dont implement the interface and leave : IEquatable out of the code, it seems the application operates exactly the same.
那么,这取决于“应用程序”的作用.例如:
List<Address> addresses = new List<Address>
{
new Address { ... }
};
int index = addresses.IndexOf(new Address { ... });
…如果既没有重写Equals(对象)也没有实现IEquatable< T>,那将无效(即索引将为-1).列表< T> .IndexOf不会调用您的Equals重载.
知道你的特定类的代码将获取Equals重载 – 但是任何与任意对象一起使用的代码(例如泛型集合,所有LINQ to Objects等)都不会接收它.