Программирование >>  Программирование с использованием ajax 

1 ... 64 65 66 [ 67 ] 68 69 70 ... 396


Члены на этом рисунке не показаны, поскольку иллюстрируются отношения. Числа на концах соединительных линий указывают, что один объект Animals будет содержать ноль или более объектов Animal. О коллекциях более подробно будет рассказываться в главе 11.

Перегрузка операций

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

Например, в класс Animal можно было бы добавить новое свойство по имени Weight (Вес). И тогда можно было бы сравнивать вес животных с помощью такого кода:

if (cowA.Weight > cowB.Weight)

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

if (cowA > cowB) {

Здесь операция больше чем (>) была перегружена. Перегруженной называется такая операция, для который был специально написан код для выполнения требуемого действия; этот код добавляется в определение одного из классов, для которого она должна выполняться. В предыдущем примере используются два объекта Cow, поэтому определение перегрузки операции содержится в классе Cow. Операции могут также перегружаться и для получения возможности работать с разными классами одинаковым образом, что тогда требует добавления кода в одно (или даже оба) из определений классов.

Важно обратить внимание, что перегружать подобным образом в языке С# можно только существующие операции; создавать новые нельзя. Однако реализации можно предоставлять как для унарных, так и для бинарных версий операции вроде +. О том, как это делать, будет рассказываться в главе 18.

События

Объекты на одном из этапов обработки могут генерировать (и потреблять) события (event). События являются важными вхождениями, в связи с которыми в других частях кода могут выполняться определенные действия, подобные, но более мощные, чем генерация исключений. Например, может быть необходимо, чтобы при добавлении объекта Animal в коллекцию Animals выполнялся определенный код, не являющийся ни частью класса Animals, ни частью того кода, который вызывает метод Add О . Чтобы добиться такого поведения, потребуется добавить в код обработчик событий, представляющий собой функцию особого вида, которая вызывается при возникновении события. Кроме того, потребуется также сконфигурировать этот обработчик, чтобы он ожидал поступления именно интересующего события.



С помощью событий можно создавать управляемые событиями приложения, которые являются гораздо более полезными, чем может показаться поначалу. Достаточно вспомнить о том, что все Windows-приложения, например, полностью зависят от событий. Каждый щелчок на кнопке или перетаскивание ползунка полосы прокрутки, который выполняет пользователь, осуществляется через обработку событий, по мере поступления событий от мыши или клавиатуры.

Как именно это все происходит в Windows-приложениях, еще будет показано чуть позже в этой главе, а вообще события детально рассматриваются в главе 13.

Ссылочные типы и типы-значения

Данные в С# сохраняются в переменной одним из двух способов, который зависит от типа переменной. Этот тип относится к одной из двух категорий: ссылка или значение. Отличия описаны ниже.

□ Типы-значения хранят себя и свое содержимое в одном месте в памяти.

□ Ссылочные типы хранят ссылку на другое место в памяти (называемое кучей), в котором уже и непосредственно хранится их содержимое.

На самом деле чрезмерно беспокоиться об этом при использовании С# не нужно. Пока что в этой книге переменные string (которые относятся к ссылочным типам) и другие простые переменные (большинство из которых относится к типам-значениям, как, например, переменные int) применялись практически одинаково.

Одно из главных отличий между типами-значениями и ссылочными типами состоит в том, что типы-значения всегда содержат значения, в то время как ссылочные типы могут быть нулевыми (null), т.е. не содержать вообще никакого значения. Существует, однако, возможность создавать тип-значение, ведущий себя в этом отношении подобно ссылочному типу (содержать null), путем использования допускающих null типов, которые являются разновидностью обобщений (generics). Обобщения представляют собой усовершенствованную технологию, и более подробно рассматриваются в главе 12.

Единственными простыми типами, которые представляют собой ссылочные типы, являются string и object, хотя массивы неявно тоже являются ссылочными типами. Каждый создаваемый класс будет представлять собой ссылочный тип, поэтому здесь основной акцент будет делаться именно на них.

Структуры

Главное отличие между типами-структурами и классами состоит в том, что типы-структуры представляют собой типы-значения. То, что структуры и классы похожи, наверняка уже приходило вам в голову, особенно тогда, когда в главе 6 было показано, как в типах-структурах можно использовать функции. Более подробно об этом пойдет речь в главе 9.

Объектно-ориентированное программирование для Windows-приложений

В главе 2 демонстрировался пример создания простого Windows-приложения на языке С#. Приложения Windows очень сильно зависят от приемов ООП, и поэтому в настоящем разделе именно на этом и делается акцент для иллюстрации некоторых освещавшихся в настоящей главе моментов. В частности, в следующем практическом занятии предлагается еще один простой пример.



Практическое зз!

Объекты в действии

1. Создайте новое Windows-приложение по имени Ch08Ex01 и сохраните его в каталоге С:\BegVCSharp\Chapter08.

2. Добавьте в него новый элемент управления Button из окна Toolbox и поместите его в центр формы Forml, как показано на рис. 8.12.

3. Дважды щелкните на элементе Button, чтобы добавить код для обработки щелчка. Измените код, который появится, следующим образом:

private void buttonl Click(object sender. System.EventArgs e) {

((Button)sender).Text = Clicked! ; Выполнен щелчок Button newButton = new Button (); newButton.Text = New Button! ;

newButton.Click += new EventHandler(newButton Click); Controls.Add(newButton);

private void newButton Click(object sender. System.EventArgs e) {

((Button)sender).Text = Clicked!! ; }

4. Запустите приложение. После этого на экране должна появиться форма, выглядящая так, как показано на рис. 8.13.



Рис. 8.12. Добавление кнопки

Рис. 8.13. Приложения ChOSExOl в работе

5. Щелкните на кнопке с надписью buttonl. После этого изображение на экране должно измениться (рис. 8.14).

6. Щелкните на кнопке с надписью New Button! (Новая кнопка). После этого изображение на экране должно измениться так, как показано на рис. 8.15.

Описание полученных результатов

Добавление всего лишь нескольких строк кода позволило создать Windows-приложение, которое кое-что делает и демонстрирует применение некоторых приемов ООП в С#. Выражение объектом является все, что угодно в случае Windows-приложений - более чем правда.



1 ... 64 65 66 [ 67 ] 68 69 70 ... 396

© 2006 - 2024 pmbk.ru. Генерация страницы: 0.001
При копировании материалов приветствуются ссылки.
Яндекс.Метрика