Читаем C#. Объектно ориентированное программирование полностью

объектные переменные, Lic1 и Lic2, класса License. После этого разными

методами создается несколько объектов. Так, команда создания объекта

с помощью конструктора с тремя аргументами имеет вид Lic1=new License("Иванов

И.И.",11111,'A'). «Копия» объекта создается командой

Lic2=new Licen se(Lic1). Наконец, команда создания объекта с помощью

конструктора с одним текстовым аргументом выглядит как Lic2=new License("Петров П.П."). В результате выполнения этого несложного программ-

ного кода последовательно появляется несколько диалоговых окон, кото-

рые представлены и прокомментированы в табл. 2.1.

ПРИМЕЧАНИЕ Первые три информационных окна, которые отображаются конструк-

торами, отображаются одно за другим после щелчка на кнопке ОК

предыдущего окна. Три окна с предупреждением об удалении объ-

екта  отображаются  в  результате  выполнения  деструктора.  И  если

время и место вызова конструктора можно определить достаточно

точно,  то,  когда  именно  будет  вызван  деструктор,  сказать  можно

только примерно. В C# используется система автоматической сборки

мусора — если в программе на объект утрачены ссылки, то такой

объект будет автоматически удален из памяти. Правда, не факт, что

это  произойдет  сразу  после  утраты  ссылки.  Например,  командой

Lic2=new  License(Lic1)  создается  новый  объект,  и  ссылка  на  него

записывается  в  переменную  Lic2.  Однако  после  выполнения  ко-

манды Lic2=new License("Петров П.П.") ссылка на этот объект будет

утрачена,  поскольку  теперь  переменная  Lic2  ссылается  на  другой

объект,  созданный  инструкцией  new  License("Петров  П.П.").  Это

повод для удаления объекта из памяти (и вызова деструктора). Еще

одна хорошая причина вызова деструкторов — удаление объектов

перед завершением работы программы. В нашем случае в программе

(в главном методе) создается три разных объекта (напомним, объекты

создаются там, где есть инструкция new). Поэтому при завершении

работы  программы  из  памяти  выгружается  три  объекта.  Три  раза

будет  запускаться  деструктор,  и  гипотетически  появится  три  окна

с предупреждением об удалении объектов. Гипотетически — потому

что, если пользователь будет нажимать кнопки ОК в последних окнах

неспешно, есть шанс увидеть далеко не все окна — программа за-

кончит работу до того, как все три окна появятся на экране.

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

Таблица 2.1. Окна, которые отображаются при выполнении программы

Окно сообщения

Комментарий

Диалоговое окно появляется в результате выполне-

ния инструкции new License("Иванов И.И.",

11111,'A')

Диалоговое окно появляется в результате выполне-

ния инструкции new License(Lic1)

Диалоговое окно появляется в результате

new License("Петров П.П.")

Диалоговое окно появляется при удалении объекта,

который создавался в результате выполнения ко-

манды Lic2=new License("Петров П.П.")

Удаление из памяти объекта, который создавался

командой Lic2=new License(Lic1)

72

Глава 2. Классы и объекты

Окно сообщения

Комментарий

Удаление из памяти объекта, который создавался

командой Lic1=new License("Иванов И.И.",

11111,'A')

Нас в дальнейшем будут интересовать в основном конструкторы. При этом

важно помнить, что конструктор вызывается каждый раз при создании но-

вого объекта. Причем именно объекта, а не объектной переменной. Более

того, впоследствии мы узнаем, что класс объектной переменно и класс объ-

екта могут и не совпадать (хотя идеологическая связь между ними будет).

Но все это мы узнаем несколько позже.

Ранее мы работали с классами, для которых не описывались конструк-

торы, и при этом особых проблем с созданием объектов не наблюдали.

Объяснение простое (и мы его уже приводили ранее): у каждого класса

есть конструктор по умолчанию, который не предполагает передачу

аргументов. Именно этот незримый конструктор вызывается при соз-

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

только мы описали хотя бы один конструктор в классе, конструктор

по умолчанию прекращает свое незримое существование.

Способы создания объектов класса полностью определяются теми

конструкторами, которые описаны в классе. Например, если в классе

не описан конструктор без аргументов (но есть иные конструкторы), в команде new имя_класса() создания объекта после имени класса

пустые скобки оставлять нельзя — это ошибка.

Наследование и уровни доступа

— А рекомендацию нашего венценосного

брата короля Эдуарда этот Мальгрим имеет?

— Имеет, Ваше Величество!

— Хорошая рекомендация?

— Плохая, Ваше Величество!

Из к/ф «31 июня»

Наследование — исключительно полезный и эффективный механизм, кото-

рый значительно упрощает работу программиста и повышает надежность

Наследование и уровни доступа           73

программных кодов. Наследование позволяет создавать новые классы на

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

и проверенном фундаменте. Технически все просто: при создании нового

Перейти на страницу:

Похожие книги

1С: Бухгалтерия 8 с нуля
1С: Бухгалтерия 8 с нуля

Книга содержит полное описание приемов и методов работы с программой 1С:Бухгалтерия 8. Рассматривается автоматизация всех основных участков бухгалтерии: учет наличных и безналичных денежных средств, основных средств и НМА, прихода и расхода товарно-материальных ценностей, зарплаты, производства. Описано, как вводить исходные данные, заполнять справочники и каталоги, работать с первичными документами, проводить их по учету, формировать разнообразные отчеты, выводить данные на печать, настраивать программу и использовать ее сервисные функции. Каждый урок содержит подробное описание рассматриваемой темы с детальным разбором и иллюстрированием всех этапов.Для широкого круга пользователей.

Алексей Анатольевич Гладкий

Программирование, программы, базы данных / Программное обеспечение / Бухучет и аудит / Финансы и бизнес / Книги по IT / Словари и Энциклопедии
1С: Управление торговлей 8.2
1С: Управление торговлей 8.2

Современные торговые предприятия предлагают своим клиентам широчайший ассортимент товаров, который исчисляется тысячами и десятками тысяч наименований. Причем многие позиции могут реализовываться на разных условиях: предоплата, отсрочка платежи, скидка, наценка, объем партии, и т.д. Клиенты зачастую делятся на категории – VIP-клиент, обычный клиент, постоянный клиент, мелкооптовый клиент, и т.д. Товарные позиции могут комплектоваться и разукомплектовываться, многие товары подлежат обязательной сертификации и гигиеническим исследованиям, некондиционные позиции необходимо списывать, на складах периодически должна проводиться инвентаризация, каждая компания должна иметь свою маркетинговую политику и т.д., вообщем – современное торговое предприятие представляет живой организм, находящийся в постоянном движении.Очевидно, что вся эта кипучая деятельность требует автоматизации. Для решения этой задачи существуют специальные программные средства, и в этой книге мы познакомим вам с самым популярным продуктом, предназначенным для автоматизации деятельности торгового предприятия – «1С Управление торговлей», которое реализовано на новейшей технологической платформе версии 1С 8.2.

Алексей Анатольевич Гладкий

Финансы / Программирование, программы, базы данных