CA1044: Egenskaper ska inte bara skrivas

Egenskap Värde
Regel-ID CA1044
Title Egenskaper bör inte bara vara skrivbara
Kategori Design
Korrigeringen är antingen invasiv eller icke-invasiv Avbrott
Aktiverad som standard i .NET 10 Nej
Tillämpliga språk C# och Visual Basic

Orsak

En egenskap har en angivet accessor men inte en get-accessor.

Som standard tittar den här regeln bara på externt synliga typer, men det kan konfigureras.

Regelbeskrivning

Get-accessorer ger läsåtkomst till en egenskap och set-accessorer ger skrivåtkomst. Även om det är acceptabelt och ofta nödvändigt att ha en skrivskyddad egenskap, förbjuder designriktlinjerna användning av skrivskyddade egenskaper. Det beror på att det inte ger någon säkerhet att låta en användare ange ett värde och sedan hindra användaren från att visa värdet. Utan läsåtkomst kan inte heller tillståndet för delade objekt visas, vilket begränsar deras användbarhet.

Så här åtgärdar du överträdelser

Om du vill åtgärda ett brott mot den här regeln lägger du till en get-åtkomst till egenskapen. Om beteendet för en skrivbar egenskap är nödvändigt kan du överväga att konvertera den här egenskapen till en metod.

När du ska ignorera varningar

Vi rekommenderar att du inte undertrycker varningar från den här regeln.

Konfigurera kod för analys

Använd följande alternativ för att konfigurera vilka delar av kodbasen som regeln ska köras på.

Du kan konfigurera det här alternativet för bara den här regeln, för alla regler som gäller för eller för alla regler i den här kategorin (design) som den gäller för. Mer information finns i Konfigurationsalternativ för kodkvalitetsregel.

Inkludera specifika ytor för API:er

Du kan konfigurera vilka delar av kodbasen som ska köra den här regeln baserat på deras tillgänglighet genom att ange alternativet api_surface. Om du till exempel vill ange att regeln endast ska köras mot den icke-offentliga API-ytan lägger du till följande nyckel/värde-par i en .editorconfig-fil i projektet:

dotnet_code_quality.CAXXXX.api_surface = private, internal

Anteckning

Ersätt den XXXX delen av CAXXXX med ID:t för den tillämpliga regeln.

Exempel

I följande exempel är BadClassWithWriteOnlyProperty en typ med en skrivbar egenskap endast. GoodClassWithReadWriteProperty innehåller den korrigerade koden.

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