使接口实现与==比较
本文关键字:比较 实现 接口 | 更新日期: 2023-09-27 18:15:05
我有一个类Product : IProduct
。所有使用产品的代码都与接口一起工作,接口实现由内部DI容器提供。我需要向接口和类添加什么,以便编写如下代码:
IProduct defectiveSku;
IProduct customerSku;
…
if(customerSku == devectiveSku)
{
// refund, blame someone else
}
其他{
// scare the customer away
}
您可以使用IEquatable<T>
接口:
interface IProduct : IEquatable<IProduct> { ... }
但是您必须与Equals
方法进行比较:
if (customerSku.Equals(defectiveSku)) ...
对于像IProduct
这样的实体,与Equals
比较更好,因为它比==
运算符更好地传达了实体相等的语义;它通常只表示引用相等或值相等。
正如其他人指出的那样,我怀疑您实际上想要重载Object. equals (Object)或iequable . equals (T),但是由于您有一个实现这些类的DI容器,因此这样做可能会遇到麻烦,因为DI容器(或提供的实现)需要知道如何实现比较。如果你碰巧使用Castle Windsor,你可以使用自定义拦截器,类似于INotifyPropertyChanged的实现:http://www.hightech.ir/SeeSharp/Best-Implementation-Of-INotifyPropertyChange-Ever