更新 : 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;
}
}
}
}