CA1044: Eigenschaften sollten nicht lesegeschützt sein.
Eigenschaft | Wert |
---|---|
Regel-ID | CA1044 |
Titel | Eigenschaften sollten nicht lesegeschützt sein. |
Kategorie | Design |
Fix führt oder führt nicht zur Unterbrechung | Breaking |
Standardmäßig in .NET 8 aktiviert | Nein |
Ursache
Eine Eigenschaft verfügt über einen Set-Accessor, aber nicht über einen Get-Accessor.
Standardmäßig werden mit dieser Regel nur extern sichtbare Typen überprüft, aber dies ist konfigurierbar.
Regelbeschreibung
Get-Accessoren bieten Lesezugriff auf eine Eigenschaft, während Set-Accessoren Schreibzugriff bieten. Obwohl eine schreibgeschützte Eigenschaft akzeptabel und oft erforderlich ist, verhindern die Entwurfsrichtlinien die Verwendung von Eigenschaften, die nur geschrieben werden können. Der Grund: Wenn ein Benutzer einen Wert festlegen kann, bietet es keinerlei Sicherheitsvorteile, das Lesen und Anzeigen des Werts durch den Benutzer zu sperren. Außerdem kann der Zustand freigegebener Objekte ohne Lesezugriff nicht angezeigt werden, wodurch ihre Nützlichkeit eingeschränkt wird.
Behandeln von Verstößen
Um einen Verstoß gegen diese Regel zu beheben, fügen Sie der Eigenschaft einen Get-Accessor hinzu. Wenn das Verhalten einer schreibgeschützten Eigenschaft erforderlich ist, empfiehlt es sich, diese Eigenschaft in eine Methode umzuwandeln.
Wann sollten Warnungen unterdrückt werden?
Es wird empfohlen, Warnungen dieser Regel nicht zu unterdrücken.
Konfigurieren des zu analysierenden Codes
Mithilfe der folgenden Option können Sie konfigurieren, für welche Teile Ihrer Codebasis diese Regel ausgeführt werden soll.
Sie können diese Optionen nur für diese Regel, für alle zutreffenden Regeln oder für alle zutreffenden Regeln in dieser Kategorie (Entwurf) konfigurieren. Weitere Informationen finden Sie unter Konfigurationsoptionen für die Codequalitätsregel.
Einschließen bestimmter API-Oberflächen
Sie können je nach Zugänglichkeit festlegen, für welche Bestandteile Ihrer Codebasis diese Regel ausgeführt wird. Sie können beispielsweise festlegen, dass die Regel nur für die nicht öffentliche API-Oberfläche ausgeführt werden soll, indem Sie einer EDITORCONFIG-Datei in Ihrem Projekt das folgende Schlüssel-Wert-Paar hinzufügen:
dotnet_code_quality.CAXXXX.api_surface = private, internal
Beispiel
Das folgende Beispiel BadClassWithWriteOnlyProperty
enthält einen Typ mit einer schreibgeschützten Eigenschaft. GoodClassWithReadWriteProperty
enthält den korrigierten Code.
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; }
}