我在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接口.
我不太了解它.我从未使用的第一个例子和我经常使用的第二个例子(这是界面的典型例子).一些建议 - 补充剂?
它在实践中如何应用?
不同之处在于第二个示例是接口继承.第二个是对泛型类型的限制.
接口继承意味着继承该接口的类必须提供接口中包含的方法的实现(除非它是抽象的).因此,这基本上对类及其构建方式施加了约束
另一方面,约束对类中使用的泛型类型施加约束.这允许实现能够对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方法