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

Когда следует подавлять ошибки

Для этого правила отключать вывод предупреждений не следует.

См. также