CA1044: Propriedades não devem ser somente gravação

TypeName

PropertiesShouldNotBeWriteOnly

CheckId

CA1044

<strong>Categoria</strong>

Microsoft.design

Alteração significativa

Quebrando

Causa

A propriedade pública ou protegida tem um assessor set, mas não tem um acessador get.

Descrição da regra

Obtenha acessadores fornecem acesso a uma propriedade de leitura e acessadores set fornecem acesso de gravação. Embora seja aceitável e freqüentemente é necessário ter uma propriedade somente leitura, as diretrizes de design proíbem o uso de propriedades somente para gravação. Isso ocorre porque a permitir que um usuário definir um valor e, em seguida, impedindo que o usuário exibir o valor não fornece nenhuma segurança. Além disso, sem acesso de leitura, o estado de objetos compartilhados não pode ser exibido, que limita sua utilidade.

Como corrigir violações

Para corrigir uma violação desta regra, adicione um acessador get da propriedade. Como alternativa, se o comportamento de uma propriedade somente gravação for necessário, considere a possibilidade de converter essa propriedade para um método.

Quando suprimir avisos

É altamente recomendável que você não suprime um aviso da regra.

Exemplo

No exemplo a seguir, BadClassWithWriteOnlyProperty é um tipo com uma propriedade somente gravação. GoodClassWithReadWritePropertycontém o código corrigido.

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