Sdílet prostřednictvím


CA1044: Vlastnosti by neměl být pouze pro zápis

TypeName

PropertiesShouldNotBeWriteOnly

CheckId

CA1044

Kategorie

Microsoft.Design

Narušující změna

Narušující

Příčina

Veřejná nebo chráněná vlastnost obsahuje přístupovou metodu set, ale neobsahuje přístupovou metodu get.

Popis pravidla

Přístupové metody get poskytují přístup ke čtení vlastnosti a přístupové metody set poskytují přístup k zápisu.Ačkoli je přijatelné a často nezbytné použít vlastnosti pouze pro čtení, směrnice návrhu zakazují použití vlastností pouze pro zápis.Důvodem je skutečnost, že umožnit uživateli nastavit hodnotu a poté uživateli zabránit ve zobrazení této hodnoty není bezpečné.Taktéž bez přístupu pro čtení není možné zobrazit stav sdílených objektů, což omezuje jejich užitečnost.

Jak vyřešit porušení

Přidání přístupové metody get k vlastnosti vyřeší porušení tohoto pravidla.Pokud je zajištění chování vlastnosti určené pouze pro zápis nutné, zvažte převod této vlastnosti na metodu.

Kdy potlačit upozornění

Důrazně se doporučujeme nepotlačovat upozornění na toto pravidlo.

Příklad

V následujícím příkladu obsahuje typ BadClassWithWriteOnlyProperty vlastnost určenou pouze pro zápis.Typ GoodClassWithReadWriteProperty obsahuje opravený kód.

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