этих констант. Константы из перечисления указываются вместе с именем
перечисления и отделяются от него точкой. Забегая вперед отметим, что
щелчок на кнопке ОК означает, что метод MessageBox.Show() в качестве ре-
зультата вернет значение DialogResult.OK.
Командой res=MessageBox.Show(txt+count,cpt,MessageBoxButtons.OKCancel) отображается окно с двумя кнопками. Текст в окне содержит текущее зна-
чение счетчика count, а константа MessageBoxButtons.OKCancel в качестве
третьего аргумента метода MessageBox.Show()означает, что у окна должно
быть две кнопки (названия кнопок определяются по умолчанию как для
системных кнопок подтверждения и отмены). После того как окно будет
закрыто щелчком на кнопке ОК, кнопке Отмена или системной пиктограм-
ме (все равно что кнопка Отмена), в переменную res будет записан резуль-
тат. Этот результат мы проверяем в условном операторе. Если условие
res==DialogResult.OK выполнено (значение переменной res равно Dialog
Result.OK), снова вызывается метод ShowForm(), в результате чего открыва-
ется еще одно окно, и т. д.
Обратите внимание на то, что мы в методе ShowForm() вызываем (при
определенных условиях) метод ShowForm(), то есть метод вызывается
в самом себе. Такая ситуация называется рекурсией или рекурсивным
вызовом. Это разрешено, но очень опасно.
Главный метод программы в классе StaticDemo состоит всего из одной
команды MyForms.ShowForm(), которой вызывается статический метод
ShowForm() из класса MyForms. В результате отображается окно, представ-
ленное на рис. 2.8.
Дальнейшие события определяются поведением пользователя. Если щел-
кнуть на кнопке Отмена, все сразу прекратится. Если несколько раз щел-
кнуть на кнопке ОК, можно увидеть, например, окно, как на рис. 2.9.
Статические члены класса 97
Рис. 2.8. Так выглядит окно при запуске программы
Рис. 2.9. Так может выглядеть окно после нескольких щелчков
на кнопке ОК: номер окна изменился
Принципиальное его отличие от своих предшественников — номер, кото-
рый красуется в текстовом сообщении в области окна.
На этом мы закончим обсуждение статических членов. Мы еще будем
с ними встречаться, но особо большого внимания уделять им не будем. Тем
не менее в C# в плане работы со статичными членами есть уникальные
и экзотические моменты — например, статические конструкторы, которые
описываются с ключевым словом static и вызываются при загрузке про-
граммного кода класса в память. Но эта тема — для другой книги.
Основы синтаксиса
языка C#
Как полон я любви, как чуден милой лик,
Как много я б сказал и как мой нем язык!
Не только классы представляют интерес в языке программирования C#.
В нем много других интересных и полезных вещей — и мы сейчас о них
узнаем.
Базовые типы данных
и основные операторы
— А почему он роет на дороге?
— Да потому, что в других местах все уже
перерыто и пересеяно.
Чтобы понять, что в принципе можно делать с данными в программе, же-
лательно сначала выяснить, какими эти данные могут быть. И в этом деле
не обойтись без рассмотрения базовых типов данных. Благо, с некоторыми
из них мы уже знакомы: это, например, символьный тип char, целочислен-
Базовые типы данных и основные операторы 99
ный тип int или числовой тип с плавающей точкой double. Более полное
представление о базовых типах языка C# дает табл. 3.1.
ПРИМЕЧАНИЕ Для каждого базового (или примитивного) типа данных в C# есть
класс-оболочка. Через такие классы реализуются данные соответ-
ствующих типов, но уже как объекты. Хотя наличие классов-оболочек
на первый взгляд может показаться излишним, на практике это до-
статочно удобно, поскольку через такие классы реализуются многие
полезные методы для работы с данными. В табл. 3.1, кроме прочего, приведены и классы-оболочки для базовых типов данных.
Таблица 3.1. Базовые типы C#
Тип
Класс
Биты
Значения
Описание
byte
Byte
8
от 0 до 255
Целые неотрицательные
числа
sbyte
SByte
8
от –128 до 127
Целые числа
short
Int16
16
от –32768 до 32767
Целые числа
ushort
UInt16
16
от 0 до 65535
Целые неотрицательные
числа
int
Int32
32
от –2147483648 до 2147483647 Целые числа
uint
UInt32
32
от 0 до 4294967295
Целые неотрицательные
числа
long
Int64
64
от –9223372036854775808 до
Целые числа
9223372036854775807
ulong
UInt64
64
от 0 до 18446744073709551615 Целые неотрицательные
числа
float
Single
32
от 1.5E-45 до 3.4E+38
Действительные числа
double
Double
64
от 5E-324 до 1.7E+308
Действительные числа
decimal Decimal
128
от 1E-28 до 7.9E+28
Действительные чис-
ла — специальный тип
для выполнения особо
точных (финансовых)
вычислений
char
Char
16
от 0 до 65535
Символьный тип
bool
Boolean
8
значения true и false
Логический тип
100
Глава 3. Основы синтаксиса языка C#
Основную массу базовых (примитивных) типов составляют числовые
типы. Только непосредственно целочисленных типов восемь, плюс три
для действительных чисел. Нечисловыми являются лишь логический тип
bool и символьный тип char — да и тот представляет собой специальный