|
|
1
10
有趣的是,这些规则允许您使用扩展方法而不是常规实例方法来实现这一点。 您的“typeof(this)”约束实际上应该是“this.GetType()。“typeof(this)”没有任何意义;typeof接受类型,而不是任意表达式。 编译器始终检查约束
你不能让老虎和长颈鹿交配,但是编译器在程序中的什么地方可以检测到呢?没有。x1和x2的运行时类型在运行时之前是未知的,因此在此之前无法检测到约束冲突。 我们讨厌这样。如果一个程序在任何地方都没有强制转换,即使在经过编译器彻底检查后,仍然可能因类型系统冲突而失败,这真是太糟糕了。数组协方差就是这种情况,因为我们支持数组协方差,我们不仅有时会通过编译器传递一个中断的程序,然后崩溃,我们还必须减慢对引用类型的每个数组的每次写入,只是为了再次检查我们没有违反类型系统。这很糟糕,我们不想在类型系统中添加更多的运行时失败点。 这就是为什么我们在C#4中仔细设计新的方差特性,以确保它们始终是类型安全的。(除非数组上的现有变量转换不是类型安全的,并且将继续不是类型安全的。)我们希望确保编译器可以在编译时检查所有约束是否存在冲突,而不是必须抛出新代码来执行可能意外失败的运行时检查。 |
|
|
2
3
我认为您可以通过在末尾指定类型来实现这一点。
我目前正在解决方案中这样做,但YourType是一个接口。我想你可以用一门具体的课来做。 |
|
|
3
1
只需使用基类名称作为 constraint .
|
|
|
4
1
根据您的说明,我认为实现这一点的唯一方法是使基类通用。这有点笨拙,但应该做你需要的。
|
|
|
5
0
将其更改为:
这样,您只能使用从基类型继承的类型T |
|
Akira Takeshi · 如何用JavaScript编写扩展方法 2 年前 |
|
|
Aleksandar · 无法调用枚举扩展方法 2 年前 |
|
|
Codebadger · 将泛型传递给扩展方法 8 年前 |
|
|
Otman IGHOULASSEN · 从子类调用基类的扩展方法 8 年前 |
|
|
sirksel · 拳击弦场或扩展Kotlin中所有弦的替代方案? 8 年前 |