Overloading operator== for an interface
本问题已经有最佳答案,请猛点这里访问。
Possible Duplicate:
Can I overload an == operator on an Interface?
号
我确实理解如何为单个类重载
正如您可能已经猜到的,我希望实现
当然,我可以用
这个问题基本上归结为无法写下以下内容,因为
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | 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; } } |
号
是否无法为接口重载
无法在接口上重载运算符。在它们的核心,重载的操作符基本上是静态方法,编译器将操作符映射到这些静态方法。这意味着重载运算符具有与接口中的静态方法相同的所有问题,因此不允许使用这些问题。
指定接口具有非引用相等语义的最佳方法是让它从
您可以在接口中定义
这种比较是在类级别上进行的,而不是在接口级别上,并且在比较中还可能涉及类的其他属性。如果您希望对两个接口进行纯比较(比较属性),那么您必须定义自己的静态方法来实现这一点。