Udostępnij za pośrednictwem


CA2260: Poprawnie zaimplementuj ogólne interfejsy matematyczne

Właściwości Wartość
Identyfikator reguły CA2260
Tytuł Poprawnie zaimplementuj ogólne interfejsy matematyczne
Kategoria Użycie
Poprawka łamiąca lub nienaruszająca Niezgodność
Domyślnie włączone na platformie .NET 10 Jako ostrzeżenie
Zastosowane języki C#

Przyczyna

Ta reguła jest uruchamiana podczas implementowania ogólnego interfejsu matematycznego, który wymaga samoodnawialnego parametru typu, i kiedy nie przekazujesz samego typu jako tego parametru.

Opis reguły

Niektóre ogólne interfejsy matematyczne przedstawiają statyczne abstrakcyjne członkowie. Jedynym sposobem uzyskania dostępu do tych statycznych elementów członkowskich jest ograniczenie generyczne, które implementuje "osobliwie powtarzający się wzorzec szablonu" (CRTP). W związku z tym sam typ pochodny musi być używany dla parametru typu cyklicznego. Jeśli typ implementuje taki interfejs bez przekazywania wymaganego parametru typu i CA2260 jest ignorowany, kod zostanie skompilowany pomyślnie, ale statyczna abstrakcja nie będzie dostępna. W związku z tym tego typu nie można będzie używać. Kompilator emituje ostrzeżenie o identyfikatorze CS0315 o takim użyciu.

Jak naprawić naruszenia

Przekaż poprawny parametr typu dla parametru typu cyklicznego (TSelf) podczas implementowania tych interfejsów.

Przykład

Naruszenie:

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>
{ ... }

Poprawka:

Przekaż typ MyDate jako parametr typu dla interfejsu IParsable<TSelf>.

using System;

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

Kiedy tłumić błędy

Nie pomijaj ostrzeżeń dla tej reguły.

Zobacz też