gpt4 book ai didi

c# - 接口(interface)继承和泛型约束之间的区别

转载 作者:行者123 更新时间:2023-12-02 02:35:25 31 4
gpt4 key购买 nike

我有以下 C# 代码:

1)

public class MyBinaryTree<TItem> where TItem : IComparable<TItem>
{ ... };

2)

public class MyBinaryTree<TItem> : IComparable<TItem>
{ ... };

I found this sample at this site ,但这并不完全是我想要的方式。

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

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

我不太明白。第一个示例我从未使用过,第二个示例我经常使用(这是界面的经典示例)。一些建议 - 补充剂?

它如何应用于实践

最佳答案

不同的是,第二个例子是接口(interface)继承。第二个是constraints关于泛型类型可以是什么。

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

另一方面,约束对类中使用的泛型类型施加约束。这使得实现能够对 TItem 在类中允许执行的操作做出某些假设。

示例:

继承

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

类型约束

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

因此,您会注意到继承强制类实现方法。而类型约束不会对类实现施加任何影响。相反,类型约束强制 T 必须实现 IComparable。因此,这样您就可以依赖 T 访问 CompareTo 方法

关于c# - 接口(interface)继承和泛型约束之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9852602/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com