CA2260: правильно реализуйте универсальные математические интерфейсы
Свойство | Значение |
---|---|
Идентификатор правила | CA2260 |
Заголовок | Правильно реализовать универсальные математические интерфейсы |
Категория | Использование |
Исправление является критическим или не критическим | Не критическое |
Включен по умолчанию в .NET 8 | Как предупреждение |
Причина
Это правило запускается при реализации универсального математического интерфейса, требующего параметра само повторяющегося типа, и сам тип не передается в качестве параметра типа.
Описание правила
Некоторые универсальные математические интерфейсы вводят статические абстрактные элементы. Единственным способом доступа к этим статическим элементам является универсальное ограничение, реализующее "любопытно повторяющийся шаблон шаблона" (CRTP). Таким образом, сам производный тип должен использоваться для параметра само повторяющегося типа. Если тип реализует такой интерфейс без передачи требуемого параметра типа и CA2260 игнорируется, код будет успешно компилироваться, но статический абстракт не будет доступен. Таким образом, тип не будет использоваться. Компилятор выдает предупреждение с идентификатором CS0315 для такого использования.
Устранение нарушений
Передайте правильный параметр типа для параметра само повторяющегося типа (TSelf) при реализации этих интерфейсов.
Пример
Нарушение:
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>
{ ... }
Исправление:
MyDate
Передайте тип в качестве параметра типа для IParsable<TSelf>
интерфейса.
using System;
// No warning
public readonly struct MyDate : IParsable<MyDate>
{ ... }
Когда следует подавлять ошибки
Для этого правила отключать вывод предупреждений не следует.