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 powodująca niezgodność lub niezgodność Niezgodność
Domyślnie włączone na platformie .NET 8 Jako ostrzeżenie

Przyczyna

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

Opis reguły

Niektóre ogólne interfejsy matematyczne przedstawiają statyczne abstrakcyjne elementy członkowskie. Jedynym sposobem uzyskania dostępu do tych statycznych elementów członkowskich jest ograniczenie ogólne, które implementuje "ciekawie cykliczny 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 typ nie będzie można 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:

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

using System;

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

Kiedy pomijać błędy

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

Zobacz też