使接口实现与==相当

时间:2011-11-19 00:49:06

标签: c# .net interface

我有一个班级Product : IProduct。所有使用产品的代码都使用接口,接口实现由内部DI容器提供。我需要添加到接口和类中,因此我可以编写如下代码:

IProduct defectiveSku;

IProduct customerSku;

...

if(customerSku == devectiveSku)

{

// refund, blame someone else

}

否则

{

// scare the customer away

}

2 个答案:

答案 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