簡體   English   中英

在結構中,通過Equals實現operator ==是否有效,但不能覆蓋Equals和GetHashCode?

[英]In a struct, is it valid to implement operator== via Equals, but not override Equals and GetHashCode?

這有效嗎?

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

我覺得可能很有趣。

有效? 是。 但它並沒有給你買任何東西。

就編譯而言,它是有效的。 但它在某種意義上是“無效的”,它打破了你的類用戶的所有期望 - 框架設計指南規定你不應該實現僅存在於運算符重載中的功能 - 這些方法應該可以通過其他方式訪問。 標准是Object.Equals和operator ==實現相同的功能。

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

提供備用簽名。 大多數語言不支持運算符重載。 因此,對所有類型的CLS要求是,重載運算符以包含具有適當的特定於域的名稱的輔助方法,該名稱提供等效功能。 提供此輔助方法是公共語言規范(CLS)的要求。 以下示例符合CLS。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM