Bagikan melalui


CA2225: Overload operator telah memberi nama alternatif

Properti Nilai
ID Aturan CA2225
Judul Kelebihan beban operator telah menamai alternatif
Golongan Penggunaan
Perbaikan bersifat disruptif atau non-disruptif Non-disruptif
Diaktifkan secara default di .NET 8 No

Penyebab

Kelebihan beban operator terdeteksi dan metode alternatif bernama yang diharapkan tidak ditemukan.

Secara default, aturan ini hanya melihat jenis yang terlihat secara eksternal, tetapi ini dapat dikonfigurasi.

Deskripsi aturan

Kelebihan beban operator memungkinkan penggunaan simbol untuk mewakili komputasi untuk jenis. Misalnya, jenis yang membebani simbol + plus untuk penambahan biasanya akan memiliki anggota alternatif bernama Add. Anggota alternatif bernama menyediakan akses ke fungsionalitas yang sama dengan operator. Ini disediakan untuk pengembang yang memprogram dalam bahasa yang tidak mendukung operator yang kelebihan beban.

Aturan ini memeriksa:

  • Operator cast implisit dan eksplisit dalam jenis dengan memeriksa metode bernama To<typename> dan From<typename>.

  • Operator yang tercantum dalam tabel berikut:

C# Visual Basic C++ Nama metode alternatif
+ (biner) + + (biner) Tambahkan
+= += += Tambahkan
& Dan & BitwiseAnd
&= Dan= &= BitwiseAnd
| Atau | BitwiseOr
|= Atau= |= BitwiseOr
-- T/A -- Keputusan
/ / / Pembagian
/= /= /= Pembagian
== = == Sama dengan
^ Xor ^ Xor
^= Xor= ^= Xor
> > > BandingkanKe atau Bandingkan
>= >= >= BandingkanKe atau Bandingkan
++ T/A ++ Peningkatan
!= <> != Sama dengan
<< << << LeftShift
<<= <<= <<= LeftShift
< < < BandingkanKe atau Bandingkan
<= <= <= BandingkanKe atau Bandingkan
&& T/A && LogicalAnd
|| T/A || LogicalOr
! T/A ! LogicalNot
% Mod % Mod atau Sisa
%= T/A %= Mod
* (biner) * * Pengalian
*= T/A *= Pengalian
~ Not ~ OnesComplement
>> >> >> RightShift
>>= T/A >>= RightShift
- (Biner) - (Biner) - (Biner) Pengurangan
-= T/A -= Pengurangan
benar IsTrue T/A IsTrue (Properti)
- (Unary) T/A - Meniadakan
+ (unary) T/A + Plus
salah IsFalse Salah IsTrue (Properti)

*N/A berarti operator tidak dapat kelebihan beban dalam bahasa yang dipilih.

Catatan

Di C#, ketika operator biner kelebihan beban, operator penugasan yang sesuai, jika ada, juga secara implisit kelebihan beban.

Cara memperbaiki pelanggaran

Untuk memperbaiki pelanggaran aturan ini, terapkan metode alternatif untuk operator. Beri nama menggunakan nama alternatif yang direkomendasikan.

Kapan harus menekan peringatan

Jangan menekan peringatan dari aturan ini jika Anda menerapkan pustaka bersama. Aplikasi dapat mengabaikan peringatan dari aturan ini.

Menyembunyikan peringatan

Jika Anda hanya ingin menyembunyikan satu pelanggaran, tambahkan arahan praprosedur ke file sumber Anda untuk dinonaktifkan lalu aktifkan kembali aturannya.

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

Untuk menonaktifkan aturan untuk file, folder, atau proyek, atur tingkat keparahannya ke none dalam file konfigurasi.

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

Untuk informasi selengkapnya, lihat Cara menyembunyikan peringatan analisis kode.

Mengonfigurasi kode yang akan dianalisis

Gunakan opsi berikut untuk mengonfigurasi bagian mana dari codebase Anda yang akan menjalankan aturan ini.

Anda dapat mengonfigurasi opsi ini hanya untuk aturan ini, untuk semua aturan yang berlaku untuknya, atau untuk semua aturan dalam kategori ini (Penggunaan) yang diterapkannya. Untuk informasi selengkapnya, lihat Opsi konfigurasi aturan kualitas kode.

Menyertakan permukaan API tertentu

Anda dapat mengonfigurasi bagian mana dari basis kode yang akan menjalankan aturan ini, berdasarkan aksesibilitasnya. Misalnya, untuk menentukan bahwa aturan hanya boleh dijalankan pada permukaan API non-publik, tambahkan pasangan kunci-nilai berikut ke file .editorconfig di proyek Anda:

dotnet_code_quality.CAXXXX.api_surface = private, internal

Contoh

Contoh berikut mendefinisikan struktur yang melanggar aturan ini. Untuk memperbaiki contoh, tambahkan metode publik Add(int x, int y) ke struktur.

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