这两种方法有什么区别?
第一
public static int Foo<T>(T first, T second) where T:IComparable
{
return first.CompareTo(second)
}
第二
public static int Foo(IComparable first, IComparable second)
{
return first.CompareTo(second);
}
答案 0 :(得分:13)
对于第一种方法,两个参数的类型必须相同,例如int
和int
。该类型必须实现IComparable
接口。
对于第二种方法,这两个参数可以有不同的类型。两种类型都必须实现IComparable
接口,但不必相同,例如int
和string
。
请注意,如果类型不同,IComparable.CompareTo method可能会抛出异常。因此,最好确保 类型实际上是相同的。您可以使用第一种方法执行此操作,甚至可以使用通用IComparable<T> interface更好。
后续问题当然是:这两种方法有什么区别?
<强>第一强>
public static int Foo<T1, T2>(T1 first, T2 second) where T1 : IComparable<T2>
{
return first.CompareTo(second);
}
<强>第二强>
public static int Foo<T>(IComparable<T> first, T second)
{
return first.CompareTo(second)
}
答案:第一种方法没有包装第一个参数,而第二种方法没有。
答案 1 :(得分:1)
从提供的代码片段中可以看出差异
泛型版本:
Foo<Class1>
,Foo<Class2>
,Foo<Class3>
。
界面版本:
受益于OOP概念,隐藏了实际代码中的实现细节。
运行时类型定义(更多灵活性),但在纯粹的单词方面不那么“通用”。
一般来说:接口版本更灵活但不太通用(顺便说一下,所有东西自然取决于具体的代码实现)。