这有效吗?
public struct MyStruct
{
public int Foo { get; set; }
public static bool operator ==(MyStruct a, MyStruct b)
{
return a.Equals(b);
}
public static bool operator !=(MyStruct a, MyStruct b)
{
return !a.Equals(b);
}
}
(我知道它效率稍低,因为默认情况下Object.Equals会对值类型使用反射。但是它有效吗?)
我问,因为ReSharper突出显示它并警告我MyStruct defines operator '==' or operator '!=' but does not provide 'Object.Equals(object o)' and 'Object.GetHashCode()'
。
答案 0 :(得分:4)
我认为this可能很有趣。
答案 1 :(得分:3)
有效吗?是。但它并没有给你买任何东西。
答案 2 :(得分:2)
就编译而言,它是有效的。但它在某种意义上是“无效的”,它打破了你的类用户的所有期望 - 框架设计指南规定你不应该实现仅存在于运算符重载中的功能 - 这些方法应该可以通过其他方式访问。标准是Object.Equals和operator ==实现相同的功能。
(Can only find the 1.1 version of the guidelines at the moment):
提供备用签名。最 语言不支持运营商 超载。因此,它是一个 对所有类型的CLS要求 重载运算符包括一个 辅助方法与适当的 提供的特定于域的名称 等效功能。它是一个 通用语言规范(CLS) 提供此次要的要求 方法。以下示例是 符合CLS。