使接口实现与==比较

本文关键字:比较 实现 接口 | 更新日期: 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