我可以在接口上重载==运算符吗?我有一个这样的接口:publicinterfaceIFoo{intA{get;}intB{get;}}我有多个实现IFoo的类。我想检查是否相等,不是基于ReferenceEquality,但是如果A和B相同,那么这两个IFoos应该被认为是相同的(实际上我正在检查通过WCF发送的键值对的集合,这就是为什么我不能有ReferenceEquality)。现在如果我有:IFoofirst=newFooBar1(){A=1,B=1};IFoosecond=newFooBar2(){A=1,B=1};if(first==second){//这应该返回true}目前IFoo是IEquatable,所以FooBar1和FooBar2覆盖Equals(IFooother),但这不是==上调用的。我正在搜索我的代码以用a.Equals(b)替换a==b,但这并不好。我能做些什么?你不能。重载==需要您使用的某些类型中的静态方法,并且接口不能包含这些方法。扩展方法也无济于事。所以在接口中==总是使用引用相等。请注意,如果a==null,a.Equals(b)将抛出异常。不,您既不能在接口上重载运算符,也不能确保任何实现者都这样做(因为运算符重载在C#中是静态的)。您做出的最佳选择是使IFooinheritanceIEquatable并使用Equals(IFoo)除了CodeInChaos的回答之外,您可能有兴趣阅读有关OverridingEquals()和Operator==的指南。你在这里谈论的是一个实现细节,一个接口不应该(不能)定义它是如何实现的。以上是C#学习教程:接口上的==运算符可以重载吗?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
