CA2260:正确实现泛型数学接口
属性 | 值 |
---|---|
规则 ID | CA2260 |
标题 | 正确实现泛型数学接口 |
类别 | 使用情况 |
修复是中断修复还是非中断修复 | 非中断 |
在 .NET 9 中默认启用 | 作为警告 |
原因
实现需要自重复类型参数的泛型数学接口并且不将类型本身作为类型参数传递时,将触发此规则。
规则说明
一些泛型数学接口引入了静态抽象成员。 访问这些静态成员的唯一方法是通过可实现“特别重复模板模式”(CRTP) 的泛型约束。 因此,派生类型本身必须用于自重复类型参数。 如果在不传递所需类型参数的情况下某类型实现此类接口并且忽略 CA2260,则代码将编译成功,但无法访问静态抽象。 因此,该类型将不适用。 对于此类用法,编译器会发出 ID 为 CS0315 的警告。
如何解决冲突
实现这些接口时,为自重复类型参数 (TSelf) 传递正确的类型参数。
示例
冲突:
using System;
// Warns: The 'IParsable<TSelf>' requires the 'TSelf' type parameter to be filled with the derived type 'MyDate'
public readonly struct MyDate : IParsable<DateOnly>
{ ... }
修复:
将 MyDate
类型作为 IParsable<TSelf>
接口的类型参数传递。
using System;
// No warning
public readonly struct MyDate : IParsable<MyDate>
{ ... }
何时禁止显示错误
不禁止显示此规则发出的警告。