如果接口继承IEquatable,则实现类可以定义Equals方法的行为.是否可以定义==操作的行为?
public interface IFoo : IEquatable {} public class Foo : IFoo { // IEquatable.Equals public bool Equals(IFoo other) { // Compare by value here... } }
通过比较它们的值来检查两个IFoo引用是否相等:
IFoo X = new Foo(); IFoo Y = new Foo(); if (X.Equals(Y)) { // Do something }
是否有可能if (X == Y)
在Foo上使用Equals方法?
否 - 您无法在接口中指定运算符(主要是因为运算符是静态的).编译器确定哪个==的重载基于它们的静态类型调用(即不涉及多态),并且接口不能指定代码来说"返回调用X.Equals(Y)的结果".