rem*_*mio 6 c# operators equals-operator
在实施==操作员时,我觉得我缺少一些基本要点.
因此,我正在寻找一些最佳实践.
以下是我正在考虑的一些相关问题:
IEquatable<T>接口实现吗?还是压倒一切 object.Equals?!=运营商怎么样?(此列表可能并非详尽无遗).
Wim*_*nen 10
我会遵循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);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1647 次 |
| 最近记录: |