CA1044: Properti tidak boleh hanya dapat ditulis

Properti Nilai
ID Aturan CA1044
Judul Properti tidak boleh hanya dapat ditulis
Kategori Desain
Perbaikan bersifat merusak atau tidak merusak Merusak
Diaktifkan secara default di .NET 10 Tidak
Bahasa yang berlaku C# dan Visual Basic

Penyebab

Properti memiliki aksesor penetap tetapi tidak memiliki aksesor pengambil.

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

Deskripsi aturan

Akses get menyediakan akses untuk membaca ke properti dan akses set menyediakan akses untuk menulis. Meskipun dapat diterima dan sering kali diperlukan untuk memiliki properti baca-saja, panduan desain melarang penggunaan properti tulis saja. Ini karena membiarkan pengguna menetapkan nilai dan kemudian mencegah pengguna melihat nilai tidak memberikan keamanan apa pun. Selain itu, tanpa akses baca, status objek bersama tidak dapat dilihat, yang membatasi kegunaannya.

Cara memperbaiki pelanggaran

Untuk memperbaiki pelanggaran aturan ini, tambahkan akses get ke properti. Atau, jika perilaku properti tulis-saja diperlukan, pertimbangkan untuk mengonversi properti ini ke metode .

Kapan harus menekan peringatan

Disarankan agar Anda tidak menekan peringatan dari aturan ini.

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 (Desain) yang berlaku untuk aturan ini. Untuk informasi selengkapnya, lihat Opsi konfigurasi aturan kualitas kode.

Menyertakan permukaan API tertentu

Anda dapat mengonfigurasi bagian basis kode mana yang akan dijalankan aturan ini, berdasarkan aksesibilitasnya, dengan mengatur opsi api_surface. 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

Nota

Ganti bagian XXXXCAXXXX dengan ID aturan yang berlaku.

Contoh

Dalam contoh berikut, BadClassWithWriteOnlyProperty adalah jenis dengan properti tulis-saja. GoodClassWithReadWriteProperty memuat kode yang dikoreksi.

Imports System

Namespace ca1044

    Public Class BadClassWithWriteOnlyProperty

        Dim someName As String

        ' Violates rule PropertiesShouldNotBeWriteOnly.
        WriteOnly Property Name As String
            Set
                someName = Value
            End Set
        End Property

    End Class

    Public Class GoodClassWithReadWriteProperty

        Property Name As String

    End Class

End Namespace
public class BadClassWithWriteOnlyProperty
{
    string? _someName;

    // Violates rule PropertiesShouldNotBeWriteOnly.
    public string? Name
    {
        set
        {
            _someName = value;
        }
    }
}

public class GoodClassWithReadWriteProperty
{
    public string? Name { get; set; }
}