![](/img/trans.png)
[英]how to implement override of GetHashCode() with logic of overriden Equals()
[英]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 ==實現相同的功能。
提供備用簽名。 大多數語言不支持運算符重載。 因此,對所有類型的CLS要求是,重載運算符以包含具有適當的特定於域的名稱的輔助方法,該名稱提供等效功能。 提供此輔助方法是公共語言規范(CLS)的要求。 以下示例符合CLS。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.