C# уроки: Статические члены и конструкторы

Статические переменные

Рассмотрим пример использования статической переменной для подсчета созданных объектов. Добавим в класс переменную int Count, инициализированную нулем. При создании каждого объекта будем увеличивать значение Count на единицу. Логично предположить, что при создании нескольких объектов значение Count будет отражать их количество.

Однако, при создании нескольких объектов класса, Count остается нулем. Это происходит потому, что каждый новый объект создается со своими собственными параметрами, не наследуя значения переменных из других объектов. Это ключевое преимущество использования классов: каждый объект независим от других.

Для подсчета созданных объектов используем модификатор static. Статическая переменная Count будет доступна только для класса, а не для отдельных объектов. Обращение к ней осуществляется через имя класса: Animal.Count. Попытка обратиться к Count через объект класса (Cat.Count) приведёт к ошибке, поскольку статические члены не принадлежат объектам.

Animal.Count++;

При создании нескольких объектов и последующем выводе значения Animal.Count, мы увидим корректное количество созданных объектов. Статические переменные взаимодействуют только с классом и не могут быть изменены через объекты.

Конструкторы

При создании объектов часто приходится инициализировать несколько переменных. Для упрощения этого процесса используются конструкторы. Конструктор — это специальный метод, который вызывается автоматически при создании нового объекта.

Создадим конструктор для нашего класса. Для доступа к нему из других классов используем модификатор доступа public. В конструкторе присвоим значения переменным (name, age, happiness) и увеличим значение статической переменной Count.

public Animal()
{
    name = "defaultName";
    age = 7;
    happiness = 0.7f;
    Animal.Count++;
    Print(); // Вызов метода Print в конструкторе
}

Теперь при создании объекта, конструктор автоматически инициализирует его переменные. Можно удалить код инициализации переменных в теле класса, так как он теперь выполняется в конструкторе.

Можно создать несколько конструкторов в одном классе. Все конструкторы должны иметь одно и то же имя (имя класса), но различаться количеством и/или типами параметров.

public Animal(string name, int age, float happiness)
{
    this.name = name;
    this.age = age;
    this.happiness = happiness;
    Animal.Count++;
    Print();
}

Компилятор автоматически выбирает нужный конструктор в зависимости от переданных параметров при создании объекта. Если параметры не передаются, используется конструктор без параметров; если передаются три параметра — соответствующий конструктор с тремя параметрами.

Использование статических переменных и конструкторов значительно упрощает работу с классами и объектами в C#. Статические переменные позволяют хранить информацию, общую для всех объектов класса, а конструкторы позволяют автоматически инициализировать объекты при их создании. Возможность создавать несколько конструкторов с различными параметрами делает код более гибким и удобным.

Что будем искать? Например,программа