Partager via


CA1044 : Les propriétés ne doivent pas être en écriture seule

TypeName

PropertiesShouldNotBeWriteOnly

CheckId

CA1044

Catégorie

Microsoft.CSharp

Modification avec rupture

Oui

Cause

La propriété publique ou protégée présente un accesseur set mais aucun accesseur get.

Description de la règle

Les accesseurs get fournissent l'accès en lecture à une propriété et les accesseurs set fournissent l'accès en écriture. Bien qu'il soit acceptable et souvent nécessaire de disposer d'une propriété en lecture seule, les règles de conception interdisent l'utilisation de propriétés en écriture seule. Cela est dû au fait que si vous laissez la possibilité à un utilisateur de définir une valeur et que vous empêchez cet 'utilisateur d'afficher la valeur, vous ne garantissez aucune sécurité. De plus, sans accès en lecture, l'état des objets partagés ne peut s'afficher, ce qui limite leur utilité.

Comment corriger les violations

Pour corriger une violation de cette règle, ajoutez un accesseur get à la propriété. Si le comportement d'une propriété en écriture seule est nécessaire, vous pouvez également envisager de convertir cette propriété en méthode.

Quand supprimer les avertissements

Il est fortement recommandé de ne pas supprimer d'avertissement de cette règle.

Exemple

Dans l'exemple suivant, BadClassWithWriteOnlyProperty est un type doté d'une propriété en écriture seule. GoodClassWithReadWriteProperty contient le code corrigé.

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