![](/img/trans.png)
[英]What are industry standard best practices for implementing custom exceptions in C#?
[英]What are the best practices for implementing the == operator for a class in C#?
在實現一個==
運算符時,我覺得我缺少一些基本要點。
因此,我正在尋找一些最佳實踐。
以下是我正在考慮的一些相關問題:
IEquatable<T>
類接口實現嗎? 或者重寫object.Equals
? !=
運算符呢? (此列表可能並非詳盡無遺)。
我會遵循Microsoft的重載等於()和運算符==的指南 。
編輯 :微軟的指南包含這個重要的評論,這似乎證實了Henk的答案:
默認情況下,operator ==通過確定兩個引用是否指示相同的對象來測試引用相等性,因此引用類型不需要實現operator ==以獲得此功能。 當一個類型是不可變的,意味着實例中包含的數據不能被改變時,重載operator ==來比較值相等而不是引用相等可能是有用的,因為作為不可變對象,只要它們具有它們就可以被認為是相同的相同的價值。 不建議在非不可變類型中覆蓋operator ==
每次實現==
運算符時,一定要實現!=
, IEquatable<T>
並覆蓋Object.Equals()
和Object.GetHashCode()
以保證類的用戶的一致性。
考慮到一個類,這是我通常的實現:
public bool Equals(MyClass other) {
if (ReferenceEquals(other, null))
return false;
if (ReferenceEquals(other, this))
return true;
return // your equality code here
}
public override bool Equals(object obj) {
return Equals(obj as MyClass);
}
public override int GetHashCode() {
return // your hash function here
}
public static bool operator ==(MyClass left, MyClass right) {
return Equals(left, right);
}
public static bool operator !=(MyClass left, MyClass right) {
return !(left == right);
}
最常見的方法是不處理它。 默認值是引用比較,通常適用於類對象。
所以首先你要確定你需要價值型行為。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.