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

вызывается статический член класса так же, как и нестатический, но вме-

сто имени объекта указывается имя класса. Это логично, поскольку ста-

тический член существует вне контекста какого бы то ни было объекта.

Вместе с тем к статическому члену можно выполнить обращение и через

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

работе со статическими членами к помощи объектов, важно понимать, что

любые изменения статических членов (полей) автоматически отражаются

на всех объектах, поскольку статический член один для всех объектов —

и тех, что уже существуют, и тех, что только будут созданы. В этом смысле

статический член класса — член общего пользования, со всеми плюсами

и минусами этого подхода. Некоторые методы работы со статическими

членами рассмотрим на простом примере. Исследуем программный код, представленный в листинге 2.10.

ПРИМЕЧАНИЕ Здесь мы имеем дело с Windows-проектом. В среде Visual C# Express создается проект соответствующего типа.

Листинг 2.10.  Статические члены класса

using System;

using System.Windows.Forms;

// Класс со статическими членами:

class MyForms{

// Закрытое статическое поле для

// подсчета открытых окон:

private static int count=0; // Нулевое начальное значение

// Статический метод для отображения

// окна с двумя кнопками:

public static void ShowForm(){

// Текстовые переменные:

string txt="Перед Вами окно № "; // Текст в окне

// Заголовок окна:

string cpt="Статические члены класса";

// Значение статического поля-счетчика

// увеличивается на единицу:

count++;

// Переменная для запоминания выбора

// пользователя при щелчке на одной

// из кнопок окна:

DialogResult res;

// Отображение окна и запоминание

// выбора пользователя:

res=MessageBox.Show(txt+count,cpt,MessageBoxButtons.OKCancel);

Статические члены класса           95

// Проверяем, каков был выбор пользователя.

// Если щелкнули кнопку ОК:

if(res==DialogResult.OK) ShowForm(); // Рекурсивный вызов

// метода

}

}

// Класс с главным методом программы:

class StaticDemo {

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

public static void Main(){

// Вызываем статический метод:

MyForms.ShowForm();

}

}

Идея, положенная в основу программы, достаточно простая. В начале про-

граммы отображается окно с тестовым сообщением в центральной области

окна и двумя кнопками: ОК и Отмена. Текстовое сообщение содержит инфор-

мацию о номере окна. В начале выполнения программы открывается окно

с первым номером. Если пользователь щелкает на кнопке Отмена, окно за-

крывается и на этом работа программы прекращается. Если пользователь

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

окна. Если в этом новом окне щелкнуть на кнопке Отмена, работа программы

прекратится. Если щелкнуть на кнопке ОК, появится новое окно с новым

номером (который на единицу больше номера предыдущего окна), и т. д.

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

с названием MyForms. У этого класса есть целочисленное статическое поле

count, значение которого еще при объявлении указано как нулевое. Это не

обязательно, поскольку по умолчанию числовые поля классов получают

начальные нулевые значения. Но явно указывать значение лучше хотя бы

потому, что так легче читается код. Поле count объявлено не только как

статическое, но еще и как закрытое. Назначение этого поля — запоминать

количество открытых окон. Поэтому оно статическое. Поле должно быть

таким, что единственный способ изменить его — открыть новое окно. Поэ-

тому поле закрытое.

Еще у класса есть статический метод ShowForm() для отображения окна

с двумя кнопками. Метод статический, поэтому для его вызова нам не

надо будет создавать объект класса. В методе объявляются и инициали-

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

зов метода означает, что будет открыто окно, командой count++ на единицу

увеличивается значение статического поля-счетчика. Кроме этого, коман-

дой DialogResult res объявляется переменная, с помощью которой мы за-

помним, на какой кнопке щелкнул пользователь в диалоговом окне. Это

96

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

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

в том, что метод MessageBox.Show(), который мы уже несколько раз исполь-

зовали и будем использовать в методе ShowForm(), возвращает результат.

Этот результат позволяет определить, на какой кнопке в окне щелкнул

пользователь. Нас результат метода MessageBox.Show() ранее не интересо-

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

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

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

минать результат вызова метода MessageBox.Show(). Результат метода — это

значение типа DialogResult. В C# есть такое понятие, как перечисление —

набор числовых констант со специальными именами. Переменная, объяв-

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

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

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

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

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

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

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

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

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

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