|
|
1
1
没有约束的泛型参数的使用方式与它们的类型相同
要在通用参数类型上获得特定于类型的语法,需要添加约束,例如:
用途:
这是实现方法的一个可能的解决方案。
但是,由于这里固有的类型不相容性和泛型的静态编译,我们已经失去了强大的类型。所以,这个问题的答案是肯定的,但代价相当大。当强制转换为
还要注意,在您的代码中
因为内置隐式转换
|
|
|
2
6
您的理想解决方案将具有以下签名:
哪里
然后可以传入任何类型,假定该类型实现
但是,您不能更改的接口
但是,您可以创建自己的类,该类具有来自
|
|
3
5
除非类型约束明确要求作为类型参数传递的任何类型都具有此类成员,否则不能对泛型类型参数的值调用成员。这是通过将它们约束到特定的接口来完成的(您不能只说“我想要任何
在您的案例中,没有好的方法可以做到这一点,因为在
|
|
4
2
我当然会将其归类为奇怪的代码,但是通过查看您正在使用的类型,您可以发现一些共性:
一个字符和一个字节是可比较的。这个方法现在返回一个迭代器,它将为您提供一个字符到一个字符或一个字符到同一索引上一个字节的每次比较的结果。如果可以枚举这些类型并比较它们的元素,则此方法当然可以与其他类型一起使用。 |
|
|
5
1
这是“泛型不是模板”的另一个例子——泛型依赖于由类型约束(显式或隐式)定义的多态性,而C++模板更像是复杂的宏,它允许您通过EIth-Cub打字或“静态多态”来获得。
建议
相比之下,在C中,我们只知道参数是对象,不一定是同一类型的(没有类型约束),因此我们只能使用
你可以写专门的转换
在库中,最常用的泛型是诸如强类型集合(重要的是对象共享一个类型,而不是类型的作用)和函数类型(委托、事件处理程序等)。除了将行为抽象到基库抽象类型之外,我还使用了它们,这样消费程序集中的具体类型就可以将自己的类型信息注入到共享的基库中——一个简单的示例
|
|
|
6
0
为什么不使用每种类型的比较函数呢?C中的每个类型都是从基本对象类派生的。您还可以编写一个函数来接收两个对象并进行比较。
|
|
|
7
0
我认为仿制药在这里不太合适。 要修复错误,需要将(使用泛型类型约束)约束到具有索引器属性和长度属性的接口。然而,这并不是你真正想做的。 根据当前的实现,方法重载有什么问题? |