Dela via


CA2260: Implementera allmänna matematiska gränssnitt korrekt

Egenskap Värde
Regel-ID CA2260
Title Implementera allmänna matematiska gränssnitt korrekt
Kategori Användning
Korrigeringen är antingen invasiv eller icke-invasiv Oumbrytbar
Aktiverad som standard i .NET 10 Som varning
Tillämpliga språk C#

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 den härledda typen i sig användas för den självrefererande typ parametern. 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

Ange MyDate typen som typparameter för IParsable<TSelf> gränssnittet.

using System;

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

När man ska undertrycka fel

Ignorera inte en varning från den här regeln.

Se även