我有一个班级Product : IProduct
。所有使用产品的代码都使用接口,接口实现由内部DI容器提供。我需要添加到接口和类中,因此我可以编写如下代码:
IProduct defectiveSku;
IProduct customerSku;
...
if(customerSku == devectiveSku)
{
// refund, blame someone else
}
否则
{
// scare the customer away
}
答案 0 :(得分:4)
您可以使用IEquatable<T>
界面:
interface IProduct : IEquatable<IProduct> { ... }
但是您必须与Equals
方法进行比较:
if (customerSku.Equals(defectiveSku)) ...
与Equals
相比,IProduct
等实体更好,因为它比==
运算符更能传达实体相等的语义;通常只传达引用相等或值相等。
答案 1 :(得分:1)
正如其他人所指出的那样,我怀疑你实际上想要重载Object.Equals(Object)或IEquatable.Equals(T),但是由于你有一个实现类的DI容器,你可能会遇到麻烦,因为DI容器(或提供的实现)需要知道如何实现比较。如果您正在使用Castle Windsor,您可以使用自定义拦截器来执行此操作,类似于此处的INotifyPropertyChanged实现:http://www.hightech.ir/SeeSharp/Best-Implementation-Of-INotifyPropertyChange-Ever