gpt4 book ai didi

c# - 为什么要实现 IEquatable 接口(interface)

转载 作者:行者123 更新时间:2023-11-30 13:11:08 24 4
gpt4 key购买 nike

我一直在阅读文章并在一定程度上理解接口(interface),但是,如果我想调整我自己的自定义 Equals 方法,似乎我可以在不实现 IEquatable 接口(interface)的情况下做到这一点。一个例子。

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));
}
}
}

现在,如果我不实现接口(interface)并离开 : IEquatable<Address>在代码之外,应用程序的运行似乎完全相同。因此,我不清楚为什么要实现接口(interface)?我可以在没有它的情况下编写自己的自定义 Equals 方法,断点将仍然命中该方法并返回相同的结果。谁能帮我解释一下?我对为什么在调用 Equals 方法之前包含“IEquatable<Address>”感到困惑。

最佳答案

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 { ... });

... 如果您没有覆盖 index,那将不起作用(即 Equals(object) 将为 -1)也没有实现 IEquatable<T> . List<T>.IndexOf不会调用你的 Equals过载。

了解您的特定 类的代码将获取 Equals重载 - 但任何仅适用于任意对象的代码(例如通用集合、所有 LINQ to Objects 等)都不会接受它。

关于c# - 为什么要实现 IEquatable<T> 接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32378840/

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