﻿# V3128\. The field \(property\) is used before it is initialized in constructor\.

Анализатор обнаружил использование поля \(свойства\) до его инициализации в конструкторе класса\.

Рассмотрим пример:

```cpp
class Test
{
  List<int> mylist;
  Test()
  {
    int count = mylist.Count;  // <=
    ....
    mylist = new List<int>();
  }
}
```

В конструкторе класса 'Test' производится доступ к свойству 'Count' списка 'mylist'\. При этом инициализация списка производится позже\. В результате выполнения приведенного фрагмента кода произойдет доступ по нулевой ссылке\. В данном случае необходимо обеспечить предварительную инициализацию списка, например, при его объявлении:

```cpp
class Test
{
  List<int> mylist = new List<int>();
  Test()
  {
    int count = mylist.Count;
    ....
  }
}
```

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

```cpp
class Test2
{
  int myint;
  Test2(int param)
  {
    Foo(myint);  // <=
    ....
    myint = param;
  }
}
```

В данном случае в метод 'Foo' передают поле 'myint', которое имеет значение по умолчанию 0\. Возможно, так и задумывалось, и ошибки нет\. Однако, в некоторых случаях это может приводить к неожиданному поведению\. Правильным решением будет явная инициализация поля 'myint', даже значением по умолчанию 0:

```cpp
class Test2
{
  int myint = 0;
  Test2(int param)
  {
    Foo(myint);
    ....
    myint = param;
  }
}
```

Теперь коллегам и анализатору очевидно, что программист не забыл про инициализацию поля 'myint'\.