3

这是有效的吗?

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()'

4

3 回答 3

4

我认为可能很有趣。

于 2010-09-06T08:13:30.470 回答
3

有效的?是的。但它不会给你买任何东西。

于 2010-09-06T08:08:38.160 回答
2

就它编译的事实而言,它是有效的。但它是“无效的”,因为它打破了类用户的所有期望——框架设计指南规定你不应该实现只存在于运算符重载中的功能——这些方法应该可以通过其他方式访问。标准是 Object.Equals 和 operator== 实现相同的功能。

(目前只能找到1.1版本的指南)

提供备用签名。大多数语言不支持运算符重载。出于这个原因,对于所有重载运算符的类型,CLS 要求包含具有适当的特定于域的名称的辅助方法,以提供等效的功能。提供这种辅助方法是公共语言规范 (CLS) 的要求。以下示例符合 CLS。

于 2010-09-06T08:10:14.507 回答