Compartir a través de


CA1044: Las propiedades no deben ser de solo escritura

TypeName

PropertiesShouldNotBeWriteOnly

Identificador de comprobación

CA1044

Categoría

Microsoft.Design

Cambio problemático

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.Aunque es aceptable y a menudo necesario tener una propiedad de solo lectura, las directrices de diseño prohíben el uso de propiedades de solo escritura.Esto es porque permitir que un usuario establezca un valor y a continuación impedir 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, la propiedad BadClassWithWriteOnlyProperty se establece con la propiedad de solo 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; 
         } 
      }
   }
}