CA1044: プロパティを書き込み専用にすることはできません

TypeName

PropertiesShouldNotBeWriteOnly

CheckId

CA1044

カテゴリ

Microsoft.Design

互換性に影響する変更点

あり

原因

パブリック プロパティまたはプロテクト プロパティに set アクセサーはありますが、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; 
         } 
      }
   }
}