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 8 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.

Se även