接口继承和泛型约束之间的区别

ReP*_*PRO 2 c#

在C#中以下代码:

1)

public class MyBinaryTree<TItem> where TItem : IComparable<TItem>
{ ... };
Run Code Online (Sandbox Code Playgroud)

2)

public class MyBinaryTree<TItem> : IComparable<TItem>
{ ... };
Run Code Online (Sandbox Code Playgroud)

我在这个网站上找到了这个样本,但这并不完全是我想要的方式.

第一个示例/代码告诉我们item(TItem)实现了IComparable接口.

第二个示例/代码告诉我们我们的整个类(MyBinaryTree)实现了IComparable接口.

我不太了解它.我从未使用的第一个例子和我经常使用的第二个例子(这是界面的典型例子).一些建议 - 补充剂?

在实践中如何应用

Jus*_*ony 6

不同之处在于第二个示例是接口继承.第二个是对泛型类型的限制.

接口继承意味着继承该接口的类必须提供接口中包含的方法的实现(除非它是抽象的).因此,这基本上对类及其构建方式施加了约束

另一方面,约束对类中使用的泛型类型施加约束.这允许实现能够对TItem在类中允许做什么做出某些假设.

例子:

遗产

public class IComparableImplemented : IComparable<T>
{
   //MUST implement CompareTo
   public int CompareTo(T other)
   {
       //Compare stuff
   }
}
Run Code Online (Sandbox Code Playgroud)

键入约束

public class ClassUsingConstraints<T> where T : IComparable<T>
{
   public static void method(T stuff)
   {
       stuff.CompareTo(stuff);  
   }
}
Run Code Online (Sandbox Code Playgroud)

因此,您将注意到继承强制类实现方法.而类型约束不会对类实现强制执行任何操作.相反,键入T必须实现的约束力IComparable.因此,您可以依赖T访问该CompareTo方法