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>
{ ... }
どのようなときにエラーを抑制するか
この規則による警告は抑制しないでください。
こちらもご覧ください
GitHub で Microsoft と共同作業する
このコンテンツのソースは GitHub にあります。そこで、issue や pull request を作成および確認することもできます。 詳細については、共同作成者ガイドを参照してください。
.NET