Назад Вперед Содержание

Классы и структуры.

Все написанные ранее программы использовали уже существующие классы и их методы.

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

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

Пространства имен

В предыдущих темах мы пользовались классами из стандартной библиотеки классов Framework Class Library. Физически библиотека FCL представляет собой набор DLL файлов.

Встроенные типы данных, такие как целые, вещественные, логические, реализованы в модуле Mscorlib.dll, другие типы разнесены по разным DLL файлам библиотеки FCL.

Для облегчения использования FCL, все ее содержание хорошо структурировано в виде иерархически организованных групп типов.

Каждая группа типов называется пространством имен.

Всего в FCL около 100 таких пространств.

В каждом из них содержатся классы и другие типы, имеющие некоторое общее назначение.

Например, большая часть классов для управления объектами графического интерфейса приложений Windows содержится в пространстве имен System.Windows.Forms (классы, представляющие окна, диалоги, меню и другие элементы).

Основные понятия. Класс и структура.

Классы.

С теоретической точки зрения:

Класс – это тип, описывающий устройство объектов.

Поля – это переменные, принадлежащие классу.

Методы – это функции (процедуры), принадлежащие классу.

Объект – это экземпляр класса.

Можно сказать, что класс является шаблоном для объекта, описывающим его структуру и поведение. Поля класса определяют структуру объекта, методы класса – поведение объекта.

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

Структуры.

Итак, классы относятся к ссылочным типам данных. Это означает, что объекты конкретного класса доступны по ссылке, в отличие от значений простых типов, доступных непосредственно. Но иногда прямой доступ к объектам как к значениям простых типов оказывается полезно иметь, например, ради повышения эффективности программы. Ведь каждый доступ к объектам (даже самым мелким) по ссылке связан с дополнительными издержками на расход вычислительных ресурсов и оперативной памяти.

Для разрешения подобных затруднений в C# предусмотрена структура, которая подобна классу, но относится к типу значения, а не к ссылочному типу данных. Т.е. структуры отличаются от классов тем, как они сохраняются в памяти и как к ним осуществляется доступ (классы — это ссылочные типы, размещаемые в куче, структуры — типы значений, размещаемые в стеке), а также некоторыми свойствами (например, структуры не поддерживают наследование). Из соображений производительности вы будете использовать структуры для небольших типов данных. Однако в отношении синтаксиса структуры очень похожи на классы.

Главное отличие состоит в том, что при их объявлении используется ключевое слово struct вместо class.

У каждой структуры имеются свои члены: методы, поля, индексаторы, свойства, операторные методы и события. В структурах допускается также определять конструкторы. В то же время для структуры нельзя определить конструктор, используемый по умолчанию (т.е. конструктор без параметров). Дело в том, что конструктор, вызываемый по умолчанию, определяется для всех структур автоматически и не подлежит изменению. Такой конструктор инициализирует поля структуры значениями, задаваемыми по умолчанию. А поскольку структуры не поддерживают наследование, то их члены нельзя указывать как abstract, virtual или protected.

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

Пример

Структура

Тестирование:

Результат:

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

Поэтому, если бы в предыдущем примере использовался класс UserInfo вместо структуры, получился бы следующий результат:

Назад Вперед Содержание