CA1044: свойства не должны быть доступны только на запись

Свойство Значение
Идентификатор правила CA1044
Заголовок Свойства не должны быть доступными только для записи
Категория Проектирование
Исправление является критическим или не критическим Критическое
Включен по умолчанию в .NET 8 No

Причина

Свойство имеет метод доступа set, но не метод доступа get.

По умолчанию это правило проверяет только видимые извне типы, но это поведение можно настроить.

Описание правила

Методы доступа get предоставляют доступ на чтение свойства, а методы доступа set предоставляют доступ на запись. Несмотря на то, что допустимо, а часто и необходимо иметь свойство, доступное только на чтение, рекомендации по разработке запрещают использование свойств, доступных только на запись. Это связано с тем, что разрешение пользователю установить значение, а затем запрет пользователю просматривать значение не обеспечивает никакой безопасности. Кроме того, при отсутствии доступа на чтение нельзя просмотреть состояние общих объектов, что снижает их полезность.

Устранение нарушений

Чтобы устранить нарушение этого правила, добавьте к свойству метод доступа get. Кроме того, если требуется, чтобы свойство было доступно только для записи, рассмотрите возможность преобразования этого свойства в метод.

Когда лучше отключить предупреждения

Рекомендуется не подавлять предупреждения из этого правила.

Настройка кода для анализа

Используйте следующий параметр, чтобы выбрать части базы кода для применения этого правила.

Этот параметр можно настроить только для этого правила, для всех правил, к которым он применяется, или для всех правил в этой категории (конструкторе), к которым она применяется. Дополнительные сведения см. в статье Параметры конфигурации правила качества кода.

Включение определенных контактных зон API

Вы можете настроить, для каких частей базы кода следует выполнять это правило в зависимости от их доступности. Например, чтобы указать, что правило должно выполняться только для закрытой контактной зоны API, добавьте следующую пару "ключ-значение" в файл EDITORCONFIG в своем проекте:

dotnet_code_quality.CAXXXX.api_surface = private, internal

Пример

В следующем примере BadClassWithWriteOnlyProperty — это тип с свойством, доступным только на запись. GoodClassWithReadWriteProperty содержит исправленный код.

Imports System

Namespace ca1044

    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

        Property Name As String

    End Class

End Namespace
public class BadClassWithWriteOnlyProperty
{
    string? _someName;

    // Violates rule PropertiesShouldNotBeWriteOnly.
    public string? Name
    {
        set
        {
            _someName = value;
        }
    }
}

public class GoodClassWithReadWriteProperty
{
    public string? Name { get; set; }
}