Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
| Свойство | Значение |
|---|---|
| Идентификатор правила | CA2225 |
| Заголовок | Альтернативные имена существуют для перегрузок операторов |
| Категория | Использование |
| Исправление является критическим или не критическим | неразрывный |
| Включен по умолчанию в .NET 10 | Нет |
| Применимые языки | C# и Visual Basic |
Причина
Обнаружена перегрузка оператора, однако не найден ожидаемый именованный альтернативный метод.
По умолчанию это правило проверяет только видимые извне типы, но это поведение можно настроить.
Описание правила
Перегрузка операторов позволяет использовать символы для представления вычислений для типа. Например, тип, который перегружает символ "плюс" + для сложения, обычно имеет альтернативный элемент с именем Add. Именованный альтернативный элемент предоставляет такой же доступ к функциональным возможностям, что и оператор. Он предоставляется разработчикам, которые пишут код на языках, не поддерживающих перегруженные операторы.
Это правило проверяет следующие компоненты.
Операторы неявного и явного преобразования в типе проверяются на наличие методов с именами
To<typename>иFrom<typename>.Операторы перечислены в следующей таблице.
| C# | Visual Basic | C++ | Имя альтернативного метода |
|---|---|---|---|
| + (бинарный) | + | + (бинарный) | Добавление |
| += | += | += | Добавление |
| & | И | & | BitwiseAnd |
| &= | И= | &= | BitwiseAnd |
| | | Или | | | BitwiseOr |
| |= | Or= | |= | BitwiseOr |
| -- | Н/П | -- | Декремент |
| / | / | / | Разделить |
| /= | /= | /= | Разделить |
| == | = | == | Равно |
| ^ | Xor | ^ | Xor |
| ^= | Xor= | ^= | XOR |
| > | > | > | CompareTo или Compare |
| >= | >= | >= | CompareTo или Compare |
| ++ | Н/П | ++ | Инкремент |
| != | <> | != | Равно |
| << | << | << | LeftShift |
| <<= | <<= | <<= | СдвигВлево |
| < | < | < | CompareTo или Compare |
| <= | <= | <= | CompareTo или Compare |
| && | Н/П | && | LogicalAnd |
| || | Н/П | || | LogicalOr |
| ! | Н/П | ! | ЛогическоеНе |
| % | модуль | % | Mod или Remainder |
| %= | Н/П | %= | мод |
| * (двоичный) | * | * | Умножить |
| *= | Н/П | *= | Умножить |
| ~ | Нет | ~ | OnesComplement |
| >> | >> | >> | RightShift |
| >>= | Н/П | >>= | RightShift |
| - (бинарный) | - (бинарный) | - (бинарный) | Вычесть |
| -= | Н/П | -= | Вычесть |
| true | IsTrue | Н/П | IsTrue (свойство) |
| - (унарный) | Н/П | - | Negate |
| + (унарный) | Н/П | + | Плюс |
| false | IsFalse | Ложь | IsTrue (свойство) |
*N/A означает, что оператор не может быть перегружен на выбранном языке.
Примечание.
В C# при перегрузке бинарного оператора соответствующий оператор присвоения (если таковой имеется) также неявно перегружается.
Устранение нарушений
Чтобы устранить нарушение этого правила, реализуйте альтернативный метод для оператора. Присвойте ему рекомендуемое альтернативное имя.
Когда лучше отключить предупреждения
Не отключайте предупреждения для этого правила, если вы реализуете разделяемую библиотеку. Приложения могут игнорировать предупреждение, исходящее от этого правила.
Отключение предупреждений
Если вы просто хотите отключить одно нарушение, добавьте директивы препроцессора в исходный файл, чтобы отключить и повторно включить правило.
#pragma warning disable CA2225
// The code that's violating the rule is on this line.
#pragma warning restore CA2225
Чтобы отключить правило для файла, папки или проекта, задайте его серьезность none в файле конфигурации.
[*.{cs,vb}]
dotnet_diagnostic.CA2225.severity = none
Дополнительные сведения см. в разделе Практическое руководство. Скрытие предупреждений анализа кода.
Настройка кода для анализа
Используйте следующий параметр, чтобы выбрать части базы кода для применения этого правила.
Этот параметр можно настроить только для этого правила, для всех правил, к которым он применяется, или для всех правил в этой категории (использование), к которым она применяется. Дополнительные сведения см. в статье Параметры конфигурации правила качества кода.
Включите конкретные поверхности API
Вы можете настроить компоненты базы кода для выполнения этого правила на основе их специальных возможностей, задав параметр api_surface. Например, чтобы указать, что правило должно выполняться только для непубличной поверхности API, добавьте следующую пару "ключ-значение" в файл .editorconfig в ваш проект:
dotnet_code_quality.CAXXXX.api_surface = private, internal
Примечание.
Замените XXXX частью CAXXXX идентификатором применимого правила.
Пример
В следующем примере определяется структура, нарушающая это правило. Чтобы исправить пример, добавьте в структуру общедоступный метод Add(int x, int y).
public struct Point
{
private int x, y;
public Point(int x, int y)
{
this.x = x;
this.y = y;
}
public override string ToString()
{
return String.Format("({0},{1})", x, y);
}
// Violates rule: OperatorOverloadsHaveNamedAlternates.
public static Point operator +(Point a, Point b)
{
return new Point(a.x + b.x, a.y + b.y);
}
public int X { get { return x; } }
public int Y { get { return x; } }
}