CA2260 : Implémenter correctement des interfaces mathématiques génériques

Propriété Value
Identificateur de la règle CA2260
Titre Implémenter correctement des interfaces mathématiques génériques
Catégorie Utilisation
Le correctif est cassant ou non cassant Sans rupture
Activé par défaut dans .NET 8 À titre d’avertissement

Cause

Cette règle se déclenche lorsque vous implémentez une interface mathématique générique qui nécessite un paramètre de type auto-récurrent et que vous ne transmettez pas le type lui-même comme paramètre de type.

Description de la règle

Certaines interfaces mathématiques génériques introduisent des membres abstraits statiques. La seule façon d’accéder à ces membres statiques consiste à utiliser une contrainte générique qui implémente le « Curiously Recurring Template Pattern » (CRTP). Par conséquent, le type dérivé lui-même doit être utilisé pour le paramètre de type auto-récurrent. Si un type implémente une telle interface sans transmettre le paramètre de type requis et que CA2260 est ignoré, le code est compilé correctement, mais l’abstraction statique n’est pas accessible. Par conséquent, le type n’est pas utilisable. Le compilateur émet un avertissement avec l’ID CS0315 lors de ce type d’utilisation.

Comment corriger les violations

Transmettez le paramètre de type correct pour le paramètre de type auto-récurrent (TSelf) lors de l’implémentation de ces interfaces.

Exemple

Violation :

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

Correctif :

Transmettez le type MyDate comme paramètre de type pour l’interface IParsable<TSelf>.

using System;

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

Quand supprimer les erreurs

Ne supprimez aucun avertissement de cette règle.

Voir aussi