Condividi tramite


CA1044: Le proprietà non devono essere in sola scrittura

TypeName

PropertiesShouldNotBeWriteOnly

CheckId

CA1044

Category

Microsoft.Design

Breaking Change

Breaking

Causa

La proprietà pubblica o protetta presenta una funzione di accesso set, ma non una funzione di accesso get.

Descrizione della regola

Le funzioni di accesso get forniscono accesso in lettura a una proprietà, mentre le funzioni di accesso set forniscono accesso in scrittura.Sebbene la presenza di proprietà di sola lettura sia accettabile e spesso necessaria, le linee guida di progettazione proibiscono l'utilizzo di proprietà di sola scrittura.Questo si verifica perché consentire a un utente di impostare un valore e poi impedirgli di visualizzarlo non offre alcuna garanzia di sicurezza.Inoltre, senza accesso in lettura, lo stato degli oggetti condivisi non può essere visualizzato, il che ne limita l'utilità.

Come correggere le violazioni

Per correggere una violazione di questa regola, aggiungere una funzione di accesso get alla proprietà.In alternativa, se il comportamento di una proprietà in sola scrittura è necessario, valutare la conversione di tale proprietà in un metodo.

Esclusione di avvisi

È consigliabile non escludere un avviso da questa regola.

Esempio

Nell'esempio riportato di seguito, BadClassWithWriteOnlyProperty è un tipo contenente una proprietà di sola scrittura.GoodClassWithReadWriteProperty contiene il codice corretto.

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