CA2225: İşleç aşırı yüklemeleri adlandırılmış alternatiflere sahiptir

Özellik Değer
Kural Kimliği CA2225
Başlık İşleç aşırı yüklemeleri adlandırılmış alternatiflere sahiptir
Kategori Kullanım
Hataya neden olan veya bozulmayan düzeltme Hataya neden olmayan
.NET 8'de varsayılan olarak etkin No

Neden

Bir işleç aşırı yüklemesi algılandı ve beklenen adlandırılmış alternatif yöntem bulunamadı.

Varsayılan olarak, bu kural yalnızca dışarıdan görünen türlere bakar, ancak bu yapılandırılabilir.

Kural açıklaması

İşleç aşırı yüklemesi, bir tür için hesaplamaları temsil eden simgelerin kullanılmasına olanak tanır. Örneğin, toplama için artı simgesini + aşırı yükleyen bir tür genellikle adlı Addalternatif bir üyeye sahip olur. Adlandırılmış alternatif üye işleç ile aynı işleve erişim sağlar. Aşırı yüklenmiş işleçleri desteklemeyen dillerde program yapan geliştiriciler için sağlanır.

Bu kural şu işlemleri inceler:

  • ve adlı To<typename> yöntemleri denetleyerek bir türdeki örtük ve From<typename>açık atama işleçleri.

  • Aşağıdaki tabloda listelenen işleçler:

C# Visual Basic C++ Alternatif yöntem adı
+ (ikili) + + (ikili) Ekleme
+= += += Ekleme
& And & Bit DüzeyindeVe
&= And= &= Bit DüzeyindeVe
| Veya | Bit DüzeyindeVeya
|= Or= |= Bit DüzeyindeVeya
-- Yok -- Azaltma
/ / / Böl
/= /= /= Böl
== = == Eşittir
^ Xor ^ Xor
^= Xor= ^= Xor
> > > CompareTo veya Compare
>= >= >= CompareTo veya Compare
++ Yok ++ Artış
!= <> != Eşittir
<< << << Leftshift
<<= <<= <<= Leftshift
< < < CompareTo veya Compare
<= <= <= CompareTo veya Compare
&& Yok && MantıksalVe
|| Yok || LogicalOr
! Yok ! LogicalNot
% Mod % Mod veya Kalan
%= Yok %= Mod
* (ikili) * * Çarpma
*= Yok *= Çarpma
~ Not ~ OnesComplement
>> >> >> Rightshift
>>= Yok >>= Rightshift
- (ikili) - (ikili) - (ikili) Subtract
-= Yok -= Subtract
true Istrue Yok IsTrue (Özellik)
- (birli) Yok - Geçersiz kıl
+ (birli) Yok + Artı
yanlış Isfalse False IsTrue (Özellik)

*YOK, işlecin seçilen dilde aşırı yüklenemeyeceği anlamına gelir.

Dekont

C# dilinde, bir ikili işleç aşırı yüklendiğinde, varsa ilgili atama işleci de örtük olarak aşırı yüklenir.

İhlalleri düzeltme

Bu kuralın ihlalini düzeltmek için işleç için alternatif yöntemi uygulayın. Önerilen alternatif adı kullanarak adlandırın.

Uyarıların ne zaman bastırılması gerekiyor?

Paylaşılan bir kitaplık uyguluyorsanız bu kuraldan bir uyarıyı gizlemeyin. Uygulamalar bu kuraldan gelen bir uyarıyı yoksayabilir.

Uyarıyı gizleme

Yalnızca tek bir ihlali engellemek istiyorsanız, kuralı devre dışı bırakmak ve sonra yeniden etkinleştirmek için kaynak dosyanıza ön işlemci yönergeleri ekleyin.

#pragma warning disable CA2225
// The code that's violating the rule is on this line.
#pragma warning restore CA2225

Bir dosya, klasör veya projenin kuralını devre dışı bırakmak için, yapılandırma dosyasındaki önem derecesini noneolarak ayarlayın.

[*.{cs,vb}]
dotnet_diagnostic.CA2225.severity = none

Daha fazla bilgi için bkz . Kod analizi uyarılarını gizleme.

Çözümlemek için kod yapılandırma

Bu kuralın kod tabanınızın hangi bölümlerinde çalıştırılacaklarını yapılandırmak için aşağıdaki seçeneği kullanın.

Bu seçeneği yalnızca bu kural, geçerli olduğu tüm kurallar veya bu kategorideki (Kullanım) tüm kurallar için yapılandırabilirsiniz. Daha fazla bilgi için bkz . Kod kalitesi kuralı yapılandırma seçenekleri.

Belirli API yüzeylerini ekleme

Bu kuralın üzerinde çalıştırılacak kod tabanınızın hangi bölümlerini erişilebilirliklerine göre yapılandırabilirsiniz. Örneğin, kuralın yalnızca genel olmayan API yüzeyinde çalıştırılması gerektiğini belirtmek için projenizdeki bir .editorconfig dosyasına aşağıdaki anahtar-değer çiftini ekleyin:

dotnet_code_quality.CAXXXX.api_surface = private, internal

Örnek

Aşağıdaki örnek, bu kuralı ihlal eden bir yapı tanımlar. Örneği düzeltmek için yapıya genel Add(int x, int y) bir yöntem ekleyin.

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; } }
}