воскресенье, 30 января 2022 г.

Конструкторы в Си-шарп. Указатель this

 Конструкторы в Си-шарп. Указатель this

В этом уроке мы поговорим о таких важных членах класса, как конструкторы.

Конструктор – это метод класса, предназначенный для инициализации объекта при его создании. Инициализация – это задание начальных параметров объектов/переменных при их создании.


Особенностью конструктора, как метода, является то, что его имя всегда совпадает с именем класса, в котором он объявляется. При этом, при объявлении конструктора, не нужно указывать возвращаемый тип, даже ключевое слово void. Конструктор следует объявлять как public, иначе объект нельзя будет создать (хотя иногда в этом также есть смысл).

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

Объявление конструктора имеет следующую структуру:

public [имя_класса] ([аргументы])
{
  // тело конструктора
}

Например, у нас есть класс Автомобиль. Создавая новый автомобиль, значения пробега и количества топлива в баке есть смысл поставить равными нулю:

class Car
{
   private double mileage;
   private double fuel;

   public Car() //объявление конструктора
   {
     mileage = 0;
     fuel = 0;
   }
}
class Program
{
   static void Main(string[] args)
   {
     Car newCar = new Car(); // создание объекта и вызов конструктора
   }
}

Без конструктора нам бы пришлось после создания объекта отдельно присваивать значения его полям, что очень неудобно.

Конструктор также может иметь параметры.

Пример с тем же автомобилем, только теперь при создании объекта мы можем задать любые начальные значения:

class Car
{
   private double mileage;
   private double fuel;

   public Car(double mileage, double fuel)
   {
     this.mileage = mileage;
     this.fuel = fuel;
   }
}
class Program
{
   static void Main(string[] args)
   {
     Car newCar = new Car(100, 50); //вызов конструктора с параметрами
   }
}

Ключевое слово this

В примере выше используется ключевое слово this.
Указатель this - это указатель на объект, для которого был вызван нестатический метод. Ключевое слово this обеспечивает доступ к текущему экземпляру класса. Классический пример использования this, это как раз в конструкторах, при одинаковых именах полей класса и аргументов конструктора. Ключевое слово this это что-то вроде имени объекта, через которое мы имеем доступ к текущему объекту.

Несколько конструкторов

В классе возможно указывать множество конструкторов, главное чтобы они отличались сигнатурами. Сигнатура, в случае конструкторов, - это набор аргументов. Например, нельзя создать два конструктора, которые принимают два аргумента типа int.

Пример использования нескольких конструкторов:

class Car
{
   private double mileage;
   private double fuel;

   public Car()
   {
     mileage = 0;
     fuel = 0;
   }

  public Car(double mileage, double fuel)
  {
     this.mileage = mileage;
     this.fuel = fuel;
  }
}
class Program
{
   static void Main(string[] args)
   {
     Car newCar = new Car(); // создаем автомобиль с параметрами по умолчанию, 0 и 0
     Car newCar2 = new Car(100, 50); // создаем автомобиль с указанными параметрами
  }
}

Если в классе определен один или несколько конструкторов с параметрами, мы не сможем создать объект через неявный конструктор по умолчанию:

class Car
{
   private double mileage;
   private double fuel;

  public Car(double mileage, double fuel)
   {
     this.mileage = mileage;
     this.fuel = fuel;
   }
}
class Program
{
   static void Main(string[] args)
   {
     Car newCar = new Car(100, 50);
     Car newCar2 = new Car(); // ошибка, в классе не определен конструктор без параметров
  }
}


Домашнее задание

Создайте класс Студент, определите в нем поля: имя, курс, есть ли у него стипендия. Создайте в классе несколько конструкторов, для возможности задания сразу всех указанных параметров или нескольких при создании экземпляров.

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

Комментариев нет:

Отправить комментарий

Паттерн 'Репозиторий' в ASP.NET

  Последнее обновление: 1.11.2015         Одним из наиболее часто используемых паттернов при работе с данными является паттерн 'Репозито...