CA2225:演算子オーバーロードには名前付けされた代替が存在します

プロパティ
ルール ID CA2225
Title 演算子オーバーロードには名前付けされた代替が存在します
[カテゴリ] 使用方法
修正が中断ありか中断なしか なし
.NET 8 では既定で有効 いいえ

原因

演算子のオーバーロードが検出され、予想される名前の代替メソッドが検出されませんでした。

デフォルトでは、この規則の対象は外部から参照可能な型のみですが、これは構成可能です。

規則の説明

演算子のオーバーロードでは、型の計算を表すために記号を使用できます。 たとえば、追加のためにプラス記号 + をオーバーロードする型には、通常、Add という名前の代替メンバーがあります。 名前付きの代替メンバーによって、演算子と同じ機能へアクセスできるようになります。 演算子のオーバーロードをサポートしていない言語でプログラミングする場合でも、その代替メンバーを使用できます。

この規則では以下を調べます。

  • To<typename>From<typename> という名前のメソッドをチェックすることによる、型の暗黙的および明示的なキャスト演算子。

  • 次の表に示す演算子:

C# Visual Basic C++ 代替メソッド名
+ (バイナリ) + + (バイナリ) 追加
+= += += 追加
& および & BitwiseAnd
&= And= &= BitwiseAnd
| または | BitwiseOr
|= Or= |= BitwiseOr
-- 該当なし -- Decrement
/ / / 除算
/= /= /= 除算
== = == 等しい
^ Xor ^ Xor
^= Xor= ^= Xor
> > > CompareTo または Compare
>= >= >= CompareTo または Compare
++ 該当なし ++ Increment
!= <> != 等しい
<< << << LeftShift
<<= <<= <<= LeftShift
< < < CompareTo または Compare
<= <= <= CompareTo または Compare
&& 該当なし && LogicalAnd
|| 該当なし || LogicalOr
! 該当なし ! LogicalNot
% Mod % Mod または Remainder
%= 該当なし %= Mod
* (バイナリ) * * 乗算
*= 該当なし *= 乗算
~ Not ~ OnesComplement
>> >> >> RightShift
>>= 該当なし >>= RightShift
- (バイナリ) - (バイナリ) - (バイナリ) 減算
-= 該当なし -= 減算
true IsTrue 該当なし IsTrue (プロパティ)
- (単項) 該当なし - Negate
+ (単項) 該当なし + Plus
false IsFalse 誤り IsTrue (プロパティ)

*N/A は、選択した言語で演算子をオーバーロードできないことを意味します。

注意

C# では、2 項演算子をオーバーロードすると、対応する代入演算子がある場合、これも暗黙的にオーバーロードされます。

違反の修正方法

この規則の違反を修正するには、演算子の代替方法を実装します。 推奨される代替名を使用して名前を付けます。

どのようなときに警告を抑制するか

共有ライブラリを実装している場合は、この規則による警告を抑制しないでください。 アプリケーションは、この規則による警告を無視できます。

警告を抑制する

単一の違反を抑制するだけの場合は、ソース ファイルにプリプロセッサ ディレクティブを追加して無効にしてから、規則をもう一度有効にします。

#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 サーフェイスでのみ規則を実行するように指定するには、プロジェクトの .editorconfig ファイルに次のキーと値のペアを追加します。

dotnet_code_quality.CAXXXX.api_surface = private, internal

次の例では、このルールに違反する構造体を定義します。 この例を修正するには、パブリック 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; } }
}