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

Чтобы не быть голословными, сразу рассмотрим пример класса, в котором

есть и конструкторы, и деструктор. Программный код приведен в листин-

ге 2.4.

ПРИМЕЧАНИЕ Мы создаем Windows-проект, со всеми вытекающими отсюда по-

следствиями.  Соответствующая  процедура  описывалась  в  первой

главе книги.

Листинг 2.4.  Класс с конструкторами и деструкторами

using System.Windows.Forms;

class License{

// Закрытые поля класса:

string name;

int number;

char category;

// Конструктор класса с тремя аргументами:

public License(string name,int number,char category){

// Полям присваиваются значения.

// Ключевое слово this является ссылкой на объект,

// из которого вызывается метод

// (в данном случае конструктор):

this.name=name;

this.number=number;

this.category=category;

// Отображаем результат — окно

// со значениями полей:

show();

}

// Конструктор с одним тестовым аргументом:

public License(string name){

// Присваиваем полям значения:

this.name=name;

this.number=10000;

this.category='B';

// Отображаем результат — окно

// со значениями полей:

show();

}

// Конструктор создания "копии" — создание

// объекта на основе

// уже существующего объекта того же класса:

public License(License obj){

продолжение

66

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

Листинг 2.4 (продолжение)

// Значения полей создаваемого объекта

// формируются на основе

// полей объекта-аргумента конструктора:

name=obj.name+" - дубликат";

number=obj.number+1;

category=obj.category;

// Отображаем результат — окно

// со значениями полей:

show();

}

// Деструктор класса:

~License(){

// Формируем текст для отображения

// в окне сообщения:

string txt="Удаление объекта!\n"+getInfo();

// Отображение окна с сообщением

// об удалении объекта:

MessageBox.Show(txt,"Удаление",MessageBoxButtons.OK, MessageBoxIcon.Error);

}

// Закрытый метод для формирования

// текстовой информации на основе

// значений полей объекта:

string getInfo(){

// Начальное значение формируемого текста,

// '\t' — символ табуляции,

// '\n' — переход к новой строке:

string text="Имя:\t"+name+"\n";

text=text+"Номер:\t"+number+"\n";

text=text+"Категория: "+category;

// Метод возвращает результат:

return text;

}

// Метод для отображения окна с сообщением:

public void show(){

// Формируем текст для сообщения:

string txt=getInfo();

// Отображаем окно сообщения:

MessageBox.Show(txt,"Лицензия",MessageBoxButtons.OK, MessageBoxIcon.Information);

}

}

class LicenseDemo{

// Главный метод программы:

public static void Main(){

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

// Две объектные переменные:

License Lic1,Lic2;

// Создание объекта с помощью конструктора

// с тремя аргументами:

Lic1=new License("Иванов И.И.",11111,'A');

// Создание объекта с помощью конструктора

// создания "копии":

Lic2=new License(Lic1);

// Создание объекта с помощью конструктора

// с одним текстовым аргументом:

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

}

}

У класса License есть три закрытых поля: текстовое (тип string) поле

name, целочисленное (тип int) поле number и символьное (тип char) поле

category. Все вместе представляют собой бледную аналогию водитель-

ской лицензии. У класса есть несколько конструкторов. В частности, есть

конструктор с тремя аргументами. Этот конструктор описан с сигнатурой

License(string name,int number,char category) (и атрибутом public).

Каждый из трех аргументов соответствует полю класса. Более того, аргу-

менты конструктора имеют такие же названия, как названия полей класса.

Поэтому мы столкнулись с неожиданной проблемой: как различить в про-

граммном коде конструктора имена полей и имена аргументов? Ответ

прост и состоит в том, что ссылки на поля следует выполнять с помощью

ключевого слова this, которое обозначает объект, из которого вызывается

метод (или конструктор, как в нашем случае, — ведь конструктор это тоже

метод). Например, ссылка на поле name может быть выполнена как this.

name. Аналогично, инструкции this.number и this.category являются, со-

ответственно, ссылками на поля number и category создаваемого объекта.

Разумеется,  не  все  так  просто,  как  кажется  на  первый  взгляд.  Мы

знаем, что обращение к нестатическим полям и методам выполняется

с указанием объекта. Если мы обращаемся к полю при описании про-

граммного кода метода внутри класса, объект как бы отсутствует. Мы

в таких случаях просто писали имя поля или имя метода (с аргумен-

тами или без). Так делать можно — это упрощенная форма ссылки

на поля и методы внутри класса. Но это идеологически не совсем

правильно. Другими словами, объект все равно есть, потому что без

объекта  о  нестатическом  поле  или  методе  говорить  нет  никакого

смысла. Просто в случае внутреннего кода класса под объектом под-

разумевается тот, из которого вызывается метод, или к полю которого

выполняется обращение. Для формальной ссылки на этот объект ис-

пользуют ключевое слово this. Поэтому если в коде метода встречается

инструкция вида this.поле, это означает обращение к полю объекта, из

68

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

которого вызывается метод. Это же касается и вызова методов. Другое

дело, что вместо этой классической формы внутри класса ссылка на

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

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

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

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

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

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

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

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

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