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