CA2260: Implementare correttamente interfacce matematiche generiche

Proprietà valore
ID regola CA2260
Title Implementare correttamente interfacce matematiche generiche
Categoria Utilizzo
Correzione che causa un'interruzione o un'interruzione Nessuna interruzione
Abilitato per impostazione predefinita in .NET 8 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.

Vedi anche