<分区>
Possible Duplicate:
Can I overload an == operator on an Interface?
我明白如何重载 operator==
对于一个类(class)。我什至让它与继承一起工作。但是我似乎无法为接口(interface)实现它。想象一下:
IFoo foo1 = new Foo(42);
IFoo foo2 = new Foo(42);
Assert.IsTrue( foo1 == foo2 ); // fails
您可能已经猜到了,我想要类实现 IFoo
表现得像一个值类型(至少在比较相等时)。如您所见,具体类型 Foo
的 foo1
和 foo2
当 Assert
时不再“已知”发生。所知道的只是他们的界面IFoo
.
我当然可以使用 IEquatable<IFoo>
然后写foo1.Equals(foo2)
相反,但这不是重点。如果IFoo
是一个抽象基类而不是我可以重载的接口(interface) operator==
没问题。 那么我该如何为界面做同样的事情呢?
问题基本上归结为无法写出以下内容,因为至少有一个 left
和 right
必须是 Foo
:
public interface IFoo : IEquatable<IFoo>
{
int Id { get; }
}
public class Foo : IFoo
{
public int Id { get; private set; }
... // some implementation here
public static bool operator== ( IFoo left, IFoo right ) // impossible
{
... // some null checks here
return left.Id == right.Id;
}
}
正在重载 operator==
对于一个不可能的界面还是我错过了一个技巧?