次の方法で共有


プロパティを書き込み専用にしないでください

更新 : 2007 年 11 月

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