共用方式為


CA1044:屬性不應為唯寫

型別名稱

PropertiesShouldNotBeWriteOnly

CheckId

CA1044

分類

Microsoft.Design

中斷變更

中斷

原因

公用或保護的屬性具有 set 存取子 (Accessor),但沒有 get 存取子。

規則描述

Get 存取子會提供屬性的讀取權限,而 set 存取子則提供寫入權限。雖然它是可接受並經常需要具有唯讀屬性,設計方針會禁止使用唯寫屬性的屬性。這是因為讓使用者設定一個值,然後防止使用者檢視該值並不會提供任何安全性。同時,如果沒有讀取權限,則無法檢視共用物件的狀態,進而限制這些物件的使用性。

如何修正違規

若要修正此規則的違規情形,請將 get 存取子加入至屬性。此外,如果需要唯寫屬性行為,請考慮將這個屬性轉換為方法。

隱藏警告的時機

強烈建議您不要隱藏此規則的警告。

範例

在下列範例中,BadClassWithWriteOnlyProperty 是具有唯寫屬性的型別。GoodClassWithReadWriteProperty 包含修正過的程式碼。

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