CA2260: Implementare correttamente interfacce matematiche generiche
Proprietà | valore |
---|---|
ID regola | CA2260 |
Title | Implementare correttamente interfacce matematiche generiche |
Categoria | Utilizzo |
La correzione causa un'interruzione o meno | Non causa un'interruzione |
Abilitato per impostazione predefinita in .NET 9 | Come avviso |
Causa
Questa regola viene attivata quando si implementa un'interfaccia matematica generica che richiede un parametro di tipo ricorrente e non si passa il tipo stesso come parametro di tipo.
Descrizione regola
Alcune interfacce matematiche generiche introducono membri astratti statici. L'unico modo per accedere a tali membri statici è tramite un vincolo generico che implementa il "modello modello curiosamente ricorrente" (CRTP). Pertanto, il tipo derivato stesso deve essere usato per il parametro di tipo auto-ricorrente. Se un tipo implementa tale interfaccia senza passare il parametro di tipo richiesto e CA2260 viene ignorato, il codice verrà compilato correttamente, ma l'astrazione statica non sarà accessibile. Pertanto, il tipo non sarà utilizzabile. Il compilatore genera un avviso con ID CS0315 su tale utilizzo.
Come correggere le violazioni
Passare il parametro di tipo corretto per il parametro di tipo ricorrente (TSelf) durante l'implementazione di tali interfacce.
Esempio
Violazione:
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>
{ ... }
Correzione:
Passare il MyDate
tipo come parametro di tipo per l'interfaccia IParsable<TSelf>
.
using System;
// No warning
public readonly struct MyDate : IParsable<MyDate>
{ ... }
Quando eliminare gli errori
Non escludere un avviso da questa regola.