CA2260: 汎用数学インターフェイスを正しく実装する

プロパティ
ルール ID CA2260
Title 汎用数学インターフェイスを正しく実装する
[カテゴリ] 使用方法
修正が中断ありか中断なしか なし
.NET 8 では既定で有効 警告として

原因

この規則は、自己反復型パラメーターを必要とする汎用数学インターフェイスを実装するとき、型パラメーターとして型自体を渡さない場合に始動します。

規則の説明

一部の汎用数学インターフェイスでは、静的抽象メンバーが導入されています。 これらの静的メンバーにアクセスする唯一の方法は、"奇妙に再帰するテンプレート パターン" (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>
{ ... }

修正:

IParsable<TSelf> インターフェイスの型パラメーターとして MyDate 型を渡します。

using System;

// No warning
public readonly struct MyDate : IParsable<MyDate>
{ ... }

どのようなときにエラーを抑制するか

この規則による警告は抑制しないでください。

こちらもご覧ください