Las propiedades no deben ser de sólo escritura

Actualización: noviembre 2007

Nombre de tipo

PropertiesShouldNotBeWriteOnly

Identificador de comprobación

CA1044

Categoría

Microsoft.Design

Cambio problemático

Motivo

La propiedad pública o protegida tiene un descriptor de acceso set pero no tiene un descriptor de acceso get.

Descripción de la regla

Los descriptores de acceso get proporcionan acceso de lectura a una propiedad y los de acceso set, de escritura. Mientras que es aceptable y, a menudo, necesario tener una propiedad de sólo lectura, las instrucciones de diseño prohíben utilizar propiedades de sólo escritura porque permiten al usuario establecer un valor y si se evita que el usuario vea el valor no proporciona ninguna seguridad. Además, sin acceso de lectura, no se puede ver el estado de los objetos compartidos, lo que limita su utilidad.

Cómo corregir infracciones

Para corregir una infracción de esta regla, agregue un descriptor de acceso get a la propiedad. O bien, si el comportamiento de una propiedad de sólo escritura es necesario, piense en convertirla en un método.

Cuándo suprimir advertencias

Se recomienda que no suprima ninguna advertencia de esta regla.

Ejemplo

En el ejemplo siguiente, BadClassWithWriteOnlyProperty es un tipo con una propiedad de sólo escritura. GoodClassWithReadWriteProperty contiene el código corregido.

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