在哪里可以找到CompareTo方法的定义?
作为下面的代码,我可以通过实现IComparable接口来使用CompareTo方法。但是我在Utilities类中没有为CompareTo方法给出任何定义。我知道这是一个非常琐碎的问题。但是我不理解类如何在不提供其方法实现的情况下实现接口。
public class Utilities<T> where T : IComparable
{
public T Max(T a, T b)
{
return a.CompareTo(b) > 0 ? a : b;
}
}
答案 0 :(得分:4)
您的Utilities
类未实现IComparable
。您是说T
必须实现IComparable
。如果Utilities
要实现IComparable
,它将看起来像这样:
public class Utilities<T> : IComparable
您无需在CompareTo
中定义Utilities
方法,因为无论T
是什么,都应在T
中定义该方法。
例如,您不能将Foo
用于T
,因为Foo
没有实现IComparable
:
class Foo {
// you must add a CompareTo method here in order to use Foo as T
// you must also add ": IComparable"
}
但是您可以使用string
或int
或float
,因为它们确实实现了IComparable
。
答案 1 :(得分:2)
您正在使用generic type constraint而不是实现IComparable
接口,这意味着T
必须从IComparable
实现。
如果要实现IComparable
接口,则需要在类名之后和:
约束关键字之前使用where
。
public class Utilities<T> : IComparable
where T : IComparable
{
public int CompareTo(object obj)
{
}
public T Max(T a, T b)
{
return a.CompareTo(b) > 0 ? a : b;
}
}