![](/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.