﻿# V3077\. Property setter / event accessor does not utilize its 'value' parameter\.

Анализатор обнаружил потенциальную ошибку, связанную с тем, что в аксессорах свойств и событий не используется параметр 'value'\.

Рассмотрим пример некорректного кода:

```cpp
private bool _visible;
public bool IsVisible
{
  get { return _visible; }
  set { _visible = true; }
}
```

Скорее всего, при задании нового значения свойству "IsVisible" планировали сохранить результат в переменную "\_visible", но допустили ошибку, из\-за чего изменение свойства никак не будет влиять на состояние объекта\.

Корректный вариант кода:

```cpp
public bool IsVisible
{
  get { return _visible; }
  set { _visible = value; }
}
```

Анализатор может выдавать предупреждения на код следующего вида:

```cpp
public bool Unsafe {
  get { return (flags & Flags.Unsafe) != 0; }
  set { flags |= Flags.Unsafe; }
}
```

В этом случае метод 'set' используется для изменения состояния флага и в коде ошибки нет, но использование такого свойства может вводить в заблуждение разработчика, т\.к\. результат при присваиваниях "myobj\.Unsafe \= true" и "myobj\.Unsafe \= false" будет одинаковый\.

Для сброса состояния внутренней переменной лучше воспользоваться функцией, а не свойством:

```cpp
public bool Unsafe
{
  get { return (flags & Flags.Unsafe) != 0; }
}

public void SetUnsafe()
{
  flags |= Flags.Unsafe;
}
```

Если от использования такого свойства нельзя отказаться, то можно пометить это место комментарием специального вида " //\-V3077" и анализатор в дальнейшем не будет выдавать предупреждение для этого свойства:

```cpp
public bool Unsafe {
  get { return (flags & Flags.Unsafe) != 0; }
  set { flags |= Flags.Unsafe; } //-V3077
}
```

Все способы подавления ложных предупреждений описаны в [документации](https://pvs-studio.ru/ru/docs/manual/0017/)\.