| 属性 | 值 |
|---|---|
| 规则 ID | CA2225 |
| 标题 | 运算符重载具有命名的备用项 |
| 类别 | 使用情况 |
| 修复是中断修复还是非中断修复 | 非中断 |
| 在 .NET 9 中默认启用 | 否 |
原因
检测到运算符重载,但未找到预期的命名备用方法。
默认情况下,此规则仅查看外部可见的类型,但这是可配置的。
规则说明
运算符重载允许使用符号来表示类型的计算。 例如,重载加号 + 以进行加法的类型通常会具有一个名为 Add 的备用成员。 命名的备用成员提供了对与运算符相同的功能的访问。 它针对相关开发人员提供,这些开发人员使用不支持重载运算符的语言进行编程。
此规则检查以下内容:
通过检查名为
To<typename>和From<typename>的方法在类型中隐式和显式强制转换运算符。下表中列出了这些运算符:
| C# | Visual Basic | C++ | 替代方法名称 |
|---|---|---|---|
| +(二元) | + | +(二元) | 添加 |
| += | += | += | 添加 |
| " | 且 | " | BitwiseAnd |
| %> | And= | %> | BitwiseAnd |
| | | 或 | | | BitwiseOr |
| |= | Or= | |= | BitwiseOr |
| -- | 不可用 | -- | 递减 |
| / | / | / | 除 |
| /= | /= | /= | 除 |
| == | = | == | 等于 |
| ^ | Xor | ^ | Xor |
| ^= | Xor= | ^= | Xor |
| > | > | > | CompareTo 或 Compare |
| >? | >? | >? | CompareTo 或 Compare |
| ++ | 不可用 | ++ | 增量 |
| %> | <> | %> | 等于 |
| << | << | << | LeftShift |
| <<? | <<? | <<? | LeftShift |
| < | < | < | CompareTo 或 Compare |
| <? | <? | <? | CompareTo 或 Compare |
| %> | 不可用 | %> | LogicalAnd |
| || | 不可用 | || | LogicalOr |
| " | 不可用 | " | LogicalNot |
| % | Mod | % | Mod 或 Remainder |
| %= | 不可用 | %= | Mod |
| *(二进制) | * | * | 乘 |
| *= | 不可用 | *= | 乘 |
| ~ | Not | ~ | OnesComplement |
| >> | >> | >> | RightShift |
| >>? | 不可用 | >>? | RightShift |
| -(二元) | -(二元) | -(二元) | 减 |
| -= | 不可用 | -= | 减 |
| true | IsTrue | 不可用 | IsTrue(属性) |
| - (unary) | 不可用 | - | Negate |
| +(一元) | 不可用 | + | Plus |
| false | IsFalse | False | 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
注意
将 CAXXXX 的 XXXX 部分替换为适用规则的 ID。
示例
下面的示例定义了与此规则冲突的结构。 若要更正此示例,请向该结构添加公共 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; } }
}