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
Düzeltme bozucu ya da bozmayan olabilir Kesintisiz
.NET 10'da varsayılan olarak etkin Hayır
Geçerli diller C# ve Visual Basic

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 Add adında alternatif bir üyeye sahip olur. Adlandırılmış alternatif üye, işleçle aynı işlevselliğe 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:

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

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

C# Visual Basic C++ Alternatif yöntem adı
+ (ikili sistem) + + (ikili) Ekle
+= += += Ekle
& Ve & Bit DüzeyindeVe
&= And= &= Bit DüzeyindeVe
| Veya | Bit Tabanlı VEYA
|= Or= |= Bit DüzeyindeVeya
-- Yok -- Azaltım
/ / / Böl
/= /= /= Böl
== = == Eşittir
^ Xor ^ Xor
^= Xor= ^= XOR
> > > CompareTo veya Compare
>= >= >= CompareTo veya Compare
++ Yok ++ Artış
!= <> != Eşittir
<< << << Sol Kaydırma
<<= <<= <<= Sol Kaydırma
< < < "CompareTo" veya "Compare"
<= <= <= CompareTo veya Compare
&& Yok && MantıksalVe
|| Yok || LogicalOr
! Yok ! MantıksalDeğil
% Mod % Mod veya Kalan
%= Yok %= Modül
* (ikili) * * Çarpma
*= Yok *= Çarpma
~ Not ~ OnesComplement
>> >> >> RightShift
>>= Yok >>= RightShift
- (ikili) - (ikili) - (ikili) Subtract
-= Yok -= Subtract
doğru IsTrue Yok IsTrue (Özellik)
-(tekil) Yok - Geçersiz kıl
+ (birli) Yok + Artı
yanlış IsFalse Yanlış IsTrue (Özellik)

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

Not

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 kuralın verdiği uyarıyı göz ardı edebilir.

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.

Kod çözümleme için konfigüre et

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

api_surface seçeneğini ayarlayarak, bu kuralın erişilebilirliği temelinde kod tabanınızın hangi bölümlerinde çalıştırılacaklarını 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

Not

XXXX CAXXXX bölümünü geçerli kuralın kimliğiyle değiştirin.

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