Eigenschaften sollten nicht lesegeschützt sein
Aktualisiert: November 2007
TypeName |
PropertiesShouldNotBeWriteOnly |
CheckId |
CA1044 |
Kategorie |
Microsoft.Design |
Unterbrechende Änderung |
Breaking |
Ursache
Die öffentliche oder geschützte Eigenschaft hat einen set-Accessor, jedoch keinen get-Accessor.
Regelbeschreibung
get-Accessoren geben Lesezugriff auf eine Eigenschaft, set-Accessoren geben Schreibzugriff. Während schreibgeschützte Eigenschaften zulässig und häufig notwendig sind, verbieten die Entwurfsrichtlinien die Verwendung lesegeschützter Eigenschaften, denn die Sicherheit wird nicht dadurch gefördert, dass einem Benutzer zunächst gestattet wird, einen Wert festzulegen, und er anschließend daran gehindert wird, den Wert anzuzeigen. Außerdem kann der Zustand freigegebener Objekte ohne Lesezugriff nicht angezeigt werden, wodurch ihre Nützlichkeit eingeschränkt wird.
Behandlung von Verstößen
Um einen Verstoß gegen diese Regel zu beheben, fügen Sie der Eigenschaft einen get-Accessor hinzu. Wenn das Verhalten einer lesegeschützten Eigenschaft benötigt wird, sollten Sie auch erwägen, diese Eigenschaft in eine Methode zu konvertieren.
Wann sollten Warnungen unterdrückt werden?
Es wird dringend empfohlen, keine Warnung dieser Regel zu unterdrücken.
Beispiel
Im folgenden Beispiel ist BadClassWithWriteOnlyProperty ein Typ mit einer lesegeschützten Eigenschaft. GoodClassWithReadWriteProperty enthält den korrigierten Code.
Imports System
Namespace DesignLibrary
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
Dim someName As String
Property Name As String
Get
Return someName
End Get
Set
someName = Value
End Set
End Property
End Class
End Namespace
using System;
namespace DesignLibrary
{
public class BadClassWithWriteOnlyProperty
{
string someName;
// Violates rule PropertiesShouldNotBeWriteOnly.
public string Name
{
set
{
someName = value;
}
}
}
public class GoodClassWithReadWriteProperty
{
string someName;
public string Name
{
get
{
return someName;
}
set
{
someName = value;
}
}
}
}