Freigeben über


CA1044: Eigenschaften sollten nicht lesegeschützt sein

TypeName

PropertiesShouldNotBeWriteOnly

CheckId

CA1044

Kategorie (Category)

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.Obwohl eine schreibgeschützte Eigenschaft akzeptabel und oft erforderlich ist, verhindern die Entwurfsrichtlinien die Verwendung von Eigenschaften, die nur geschrieben werden können.Grund hierfür ist, dass eine Benutzerberechtigung, die das Anzeigen eines Werts nicht gestattet, das Festlegen des Werts jedoch zulässt, keinerlei Sicherheit bietet.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 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 der Eigenschaft "lesegeschützt" festgelegt.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; 
         } 
      }
   }
}