- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
假设我有以下类(class):
public sealed class ScaleValue :
IComparable, IComparable<ScaleValue>, IEquatable<ScaleValue>
{
public double Value
{ get; set;}
public string Definition
{ get; set;}
// interface methods
...
}
如果我想让我的类(class)与 double
相媲美我应该只包括 IComparable<double>
吗?并以这种方式实现,还是我必须以其他方式实现?
当我希望我的类(class)能与 double 相媲美时 double.CompareTo
给出与 ScaleValue.CompareTo
相同的结果?
Equals
又如何呢? ?
我想我在设计中把责任放错了。我认为我最好的选择是使用 ContainsValue(double Value)
创建一个 Scale 类方法。这样我就可以查找值并将职责保留在需要的地方。
最佳答案
你的类(class)与什么相比取决于你。你可以让它与任何东西相媲美,作为 IComparable
interface的非通用版本需要 object
;在执行 CompareTo
method , 你基本上可以嗅出对象的类型(除非它是 null
)。
当您使用 IComparable<T>
的通用版本时,您正在声明您对任何类型参数 T
实现强类型比较方法是。
通常,如果您有一个 IComparable<T>
对于一种类型的实现,您可能应该有一个 IEquatable<T>
实现也是如此。
有一个 IComparable/IComparable<T>
实现意味着结构所代表的内容具有自然的顺序。排序还意味着两个实例之间可以相等:if instance a
的 T
不大于或小于实例 b
的 T
那么它必须相等。
为此,如果您实现 IComparable/IComparable<T>
, 那么逻辑要求你实现 IEquatable/IEquatable<T>
.
当然,当你实现IEquatable/IEquatable<T>
, 你应该覆盖 Equals
和 GetHashCode
.
这反过来意味着您应该覆盖所有比较运算符:
==
(这意味着 !=
)<
和 <=
>
和 >=
关于c# - 如何在C#中实现多类型IComparable/IEquatable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19209376/
我是一名优秀的程序员,十分优秀!