Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
вопросы к экзамену.docx
Скачиваний:
39
Добавлен:
01.09.2021
Размер:
4.91 Mб
Скачать

3. Конструкторы и деструкторы. Конструкторы

Конструктор — это метод, имя которого совпадает с именем его типа. Его сигнатура метода содержит только имя метода и список параметров. Она не содержит возвращаемый тип.

Конструкторы вызываются при создании нового объекта данного класса. Конструкторы выполняют инициализацию объекта.

Конструкторы в отличие от других методов не наследуются из базового класса.

Если конструктор не инициализирует значения переменных объекта, то они получают значения по умолчанию. Для переменных числовых типов это число 0, а для типа string и классов - это значение null

Person tom = new Person(); // вызов 1-ого конструктора без параметров

Person bob = new Person("Bob"); //вызов 2-ого конструктора с одним параметром

Person sam = new Person("Sam", 25); // вызов 3-его конструктора с двумя параметрами

Конструктор по умолчанию

Если в классе не определено ни одного конструктора, то для этого класса автоматически создается конструктор по умолчанию. Такой конструктор не имеет параметров и не имеет тела.

Person tom = new Person();

Оператор new выделяет память для объекта Person. И затем вызывается конструктор по умолчанию, который не принимает никаких параметров. В итоге после выполнения данного выражения в памяти будет выделен участок, где будут храниться все данные объекта Person. А переменная tom получит ссылку на созданный объект.

Конструкторы экземпляров

Конструкторы экземпляров используются для создания и инициализации переменных члена экземпляра, если создание объекта class осуществляется с помощью выражения new.

class Coords

{

public int x, y;

// constructor

public Coords()

{

x = 0;

y = 0;

}

}

Этот конструктор экземпляра вызывается каждый раз при создании объекта на базе класса Coords. Такой конструктор без аргументов называется конструктором без параметров. Зачастую такие конструкторы используются для предоставления дополнительных конструкторов.

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

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

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

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

Так, в выражении this.name = name; первая часть this.name означает, что name - это поле текущего класса, а не название параметра name. Если бы у нас параметры и поля назывались по-разному, то использовать слово this было бы необязательно.

Также через ключевое слово this можно обращаться к любому полю или методу.

Инициализаторы

Инициализаторы объектов позволяют присваивать значения всем доступным полям и свойствам объекта во время создания без вызова конструктора, за которым следуют строки операторов присваивания. Синтаксис инициализатора объекта позволяет задавать аргументы конструктора или опускать их (и синтаксис в скобках).

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

class Car

{

public string Name { get; set; }

public Color Color { get; set; }

}

Car car = new Car { Name = "Chevrolet Corvette", Color = Color.Yellow };

При использовании инициализаторов следует учитывать следующие моменты:

  • С помощью инициализатора мы можем установить значения только доступных из внешнего кода полей и свойств объекта. Например, поля name и age имеют модификатор доступа public, поэтому они доступны из любой части программы.

  • Инициализатор выполняется после конструктора, поэтому если и в конструкторе, и в инициализаторе устанавливаются значения одних и тех же полей и свойств, то значения, устанавливаемые в конструкторе, заменяются значениями из инициализатора.

*Инициализаторы объектов можно использовать для задания индексаторов в объекте.

Соседние файлы в предмете Технология программирования