CA2260: Implementera allmänna matematiska gränssnitt korrekt
Property | Värde |
---|---|
Regel-ID | CA2260 |
Title | Implementera allmänna matematiska gränssnitt korrekt |
Kategori | Användning |
Korrigeringen är icke-bakåtkompatibel | Icke-icke-bryta |
Aktiverad som standard i .NET 9 | Som varning |
Orsak
Den här regeln utlöses när du implementerar ett allmänt matematiskt gränssnitt som kräver en själv återkommande typparameter och du inte skickar själva typen som typparameter.
Regelbeskrivning
Vissa allmänna matematiska gränssnitt introducerar statiska abstrakta medlemmar. Det enda sättet att få åtkomst till dessa statiska medlemmar är genom en allmän begränsning som implementerar CRTP (märkligt återkommande mallmönster). Därför måste själva den härledda typen användas för parametern själv återkommande typ. Om en typ implementerar ett sådant gränssnitt utan att skicka den obligatoriska typparametern och CA2260 ignoreras, kompileras koden men den statiska abstrakten är inte tillgänglig. Därför kan inte typen användas. Kompilatorn genererar en varning med ID CS0315 om sådan användning.
Så här åtgärdar du överträdelser
Skicka rätt typparameter för själv återkommande typparameter (TSelf) när du implementerar dessa gränssnitt.
Exempel
Överträdelse:
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>
{ ... }
Lösningen
MyDate
Skicka typen som typparameter för IParsable<TSelf>
gränssnittet.
using System;
// No warning
public readonly struct MyDate : IParsable<MyDate>
{ ... }
När fel ska ignoreras
Ignorera inte en varning från den här regeln.