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