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.