|
Программирование >> Обработка исключительных ситуаций
Глава 5 Классы: основные понятия Понятие о классах вы получили1 в разделах Классы (см. с. 13) и Заготовка консольной программы (см. с. 17). Все программы, приведенные в этой книге ранее, состояли из одного класса с одним-единственным методом Main. Сейчас настало время подробнее изучить состав, правила создания и использования классов. По сути, отныне все, что мы будем рассматривать, так или иначе связано с этим ключевым средством языка. Класс является типом данных, определяемым пользователем. Он должен представлять собой одну логическую сущность, например, являться моделью реального объекта или процесса. Элементами класса являются данные и функции, предназначенные для их обработки. Описание класса содержит ключевое слово class, за которым следует его имя, а далее в фигурных скобках - тело класса, то есть список его элементов. Кроме того, для класса можно задать его базовые классы (предки) и ряд необязательных атрибутов и спецификаторов, определяющих различные характеристики класса: [ атрибуты ] [ спецификаторы ] class имякласса [ : предки ] тело-класса Как видите, обязательными являются только ключевое слово class, а также имя и тело класса. Имя кчасса задается программистом по общим правилам С#. Тело класса - это список описаний его элементов, заключенный в фигурные скобки. Список может быть пустым, если класс не содержит ни одного элемента. Таким образом, простейшее описание класса может выглядеть так: class Demo {} ПРИМЕЧАНИЕ- Необязательные атрибуты задают дополнительную информацию о классе. Поскольку наша задача пока состоит в том, чтобы освоить основные понятия, мы отложим знакомство с атрибутами до главы 12. А может быть, и не получили. Спецификаторы определяют свойства класса, а также доступность класса для других элементов программы. Возможные значения спецификаторов перечислены в табл. 5.1. Класс можно описывать непосредственно внутри пространства имен или внутри другого класса. В последнем случае класс называется вложенным. В зависимости от места описания класса некоторые из этих спецификаторов могут быть запрещены. Таблица 5.1. Спецификаторы класса Спецификатор Описание new Используется для вложенных классов. Задает новое описание класса взамен унаследованного от предка. Применяется в иерархиях объектов, рассматривается в главе 8 (см. с. 175) public Доступ не ограничен protected Используется для вложенных классов. Доступ только из элементов данного и производных классов internal Доступ только из данной программы (сборки) protected internal Доступ только из данного и производных классов или из данной программы (сборки) private Используется для вложенных классов. Доступ только из элементов класса, внутри которого описан данный класс abstract Абстрактный класс. Применяется в иерархиях объектов, рассматривается в главе 8 (см. с. 181) sealed Бесплодный класс. Применяется в иерархиях объектов, рассматривается в главе 8 (см. с. 182) static Статический класс. Введен в версию языка 2.0. Рассматривается в разделе Конструкторы (см. с. 114) Спецификаторы 2-6 называются спецификаторами доступа. Они определяют, откуда можно непосредственно обращаться к данному классу. Спецификаторы доступа могут присутствовать в описании только в вариантах, приведенных в таблице, а также могут комбинироваться с остальными спецификаторами. В этой главе мы будем изучать классы, которые описываются в пространстве имен непосредственно (то есть не вложенные классы). Для таких классов допускаются только два спецификатора: public и internal. По умолчанию, то есть если ни один спецификатор доступа не указан, подразумевается спецификатор internal. Класс является обобщенным понятием, определяющим характеристики и поведение некоторого множества конкретных объектов этого класса, называемых экземплярами, или объектами, класса. Понятие сборки было введено в главе 1 на с. 9. Глава 5. Классы: основные понятия Листинг 5.3 (продолжение) short tl =3. t2 = 4: int у = Max( tl , tZ ) : Console.WriteLineC у ): in t z = Max( a + tl . t l / 2 Console.WriteLineC z ); b ): вызов метода Max результат: 4 вызов метода Max результат: 5 В классе описан метод Мах, который выбирает наибольшее из двух переданных ему значений. Параметры описаны как а и Ь. В методе Main выполняются три вызова Мах. В результате первого вызова методу Мах передаются два аргумента того же типа, что и параметры, во втором вызове - аргументы совместимого типа, в третьем - выражения. ВНИМАНИЕ- Главное требование при передаче параметров состоит в том, что аргументы при вызове метода должны записываться в том же порядке, что и в заголовке метола, и должно существовать неявное преобразование типа каждого аргумента к типу соответствующего параметра. Количество аргументов должно соответствовать количеству параметров. На имена никаких ограничений не накладывается: имена аргументов могут как совпадать, так и не совпадать с именами параметров. Существуют два способа передачи параметров: по значению и но ссылке. При передаче по значению метод получает копии значений аргументов, и операторы метода работают с этими копиями. Доступа к исходным значениям аргументов у метода нет. а следовательно, нет и возможности их изменить. При передаче по ссылке (по адресу) метод получает копии адресов аргументов, он осуществляет доступ к ячейкам памяти по этим адресам и может изменять исходные значения аргументов, модифицируя параметры. В С# для обмена данными между вызывающей и вызываемой функциями предусмотрено четыре тина параметров: параметры-значения; параметры-ссылки - описываются с помощью ключевого слова ref; выходные параметры - описываются с помощью ключевого слова out: параметры-массивы - описываются с помощью ключевого слова params. Ключевое слово предшествует описанию типа параметра. Если оно опущено, параметр считается параметром-значением. Параметр-массив может быть только один и должен располагаться последним в списке, например: public int Calculate( int a. ref int b. out int c, params intf] d ) ...
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |