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