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