c# - 我可以在接口(interface)上重载 == 运算符吗?

标签 c# .net interface equality iequatable

我有一个这样的界面:

public interface IFoo
{
  int A {get;}
  int B {get;}
}

我有多个实现 IFoo 的类。
我想检查是否相等,而不是基于 ReferenceEquality,但是如果 A 和 B 相同,则两个 IFoo 应该被认为是相等的(实际上我正在检查通过 WCF 发送的键值对的集合,这就是为什么我可以'没有引用平等)。
现在,如果我有:

IFoo first = new FooBar1() { A = 1, B = 1};
IFoo second = new FooBar2() { A = 1, B = 1};
if (first == second) {
 //this should return true
}

当前 IFooIEquatable<IFoo> , 所以 FooBar1 和 FooBar2 覆盖 Equals(IFoo other) ,但这不是 == 上调用的内容。我正在寻找我的代码来替换 a==ba.Equals(b)无处不在,但这并不好。

我能做什么?

最佳答案

不,你不能。重载 == 需要您使用的一种类型中的静态方法,而接口(interface)不能包含这些方法。扩展方法也无济于事。所以在接口(interface)上 == 总是使用引用相等。

请注意,如果 a==null,a.Equals(b) 将抛出异常。

关于c# - 我可以在接口(interface)上重载 == 运算符吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5066281/

相关文章:

c# - .NET 4.0 中的代码契约,非空引用类型的粉丝们不高兴吗?

c# - .NET 窗体 : Can the runtime dispose a form's handle out from under me?

c# - 使用 .Net 创建 Google 网站

c# - 更新一个对象中的值更新第二个对象值 ASP.Net identity 2.0

javascript - 从 Typescript 中的 html 对象提取数据时,如何消除类型错误?

c# - linq 查询区分大小写

c# - 需要以 C# 字符串数据类型 "as is"获取 Oracle RAW

C# 智能感知对于采用动态参数的方法不正确

c# - 我不明白有关 .NET 继承/转换的某些内容?

Typescript:通过 'this' 获取自定义接口(interface)的类型?