Share via


CA1044: Egenskaper ska inte bara skrivas

Property Värde
Regel-ID CA1044
Rubrik Egenskaper får inte bara skrivas
Kategori Designa
Korrigeringen är icke-bakåtkompatibel Bryta
Aktiverad som standard i .NET 8 Nej

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 accessors ger läsåtkomst till en egenskap och set-åtkomsten 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 skrivskyddad egenskap är nödvändig kan du också ö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 API-ytor

Du kan konfigurera vilka delar av kodbasen som ska köras med den här regeln baserat på deras tillgänglighet. 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

Exempel

I följande exempel BadClassWithWriteOnlyProperty är en typ med en skrivskyddad egenskap. 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; }
}