Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Otvety_OOP.docx
Скачиваний:
5
Добавлен:
21.09.2019
Размер:
59.42 Кб
Скачать
  1. Пространство имен: назначение и применение.

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

хранить множества имен. По существу, имена, объявленные в одном пространстве

имен, не будут конфликтовать с такими же именами, объявленными в другом. Биб-

лиотека .NET Framework (которая является С#-библиотекой) использует пространство

имен System. Поэтому в начало каждой программы мы включали следующую инструкцию:

using System; Пространство имен объявляется с помощью ключевого слова namespace. Общая

форма объявления пространства имен имеет следующий вид:

namespace имя {

// Члены }

Все, что определено внутри

пространства имен, находится в пределах его области видимости. Следовательно, про-

странство имен определяет область видимости. Внутри пространства имен можно

объявлять классы, структуры, делегаты, перечисления, интерфейсы или другое про-

странство имен. Основное преимущество использования пространств имен состоит в том, что име-

на, объявленные внутри одного из них, не конфликтуют с такими же именами, объ-

явленными вне его. использование одного

пространства имен не аннулирует другое. При объявлении действующим некоторого

пространства имен его имя просто добавляется к именам других, которые действуют в

данный момент. Если для программы не объявлено пространство имен, используется пространство

имен, действующее по умолчанию. Главная причина инкапсуляции программного кода внутри

пространства имен состоит в предотвращении конфликтов при совпадении имен.

Пространства имен — это еще один инструмент, позволяющий программисту так ор-

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

с сетевой структурой.

  1. Структура класса: члены класса, свойства (элементы), методы, конструкторы и деструкторы, ссылка на себя (this).

Класс — это шаблон, который определяет форму объекта. Он

задает как данные, так и код, который оперирует этими данными. С# использует спе-

цификацию класса для создания объекта. Объекты — это экземпляры класса. Таким

образом, класс — это множество намерений (планов), определяющих, как должен

быть построен объект. Важно четко понимать следующее: класс — это логическая аб-

стракция. О ее реализации нет смысла говорить до тех пор, пока не создан объект

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

И еще. Вспомните, что методы и переменные, составляющие класс, называются

членами класса. Данные содержатся в переменных экземпляров, определяемых классом, а код — в

методах. Однако важно с самого начала отметить, что класс определяет также ряд

специальных членов данных и методов-членов, например статические переменные,

константы, конструкторы, деструкторы, индексаторы, события, операторы и свойства. Класс создается с помощью ключевого слова class. Общая форма определения

класса, который содержит только переменные экземпляров и методы, имеет следую-

щий вид:

class имя_класса {

II Объявление переменных экземпляров.

доступ тип переменная!;

доступ тип переменная2;

//. . .

доступ тип переменнаяЫ;

II Объявление методов.

доступ тип_возврата метод 1 (параметры) {

II тело метода

доступ тип_возврата метод2{параметры) {

// тело метода

доступ тип_возврата методы {параметры) {

/I тело метода

Здесь элемент доступ означает спецификатор досту-

па (например, public), который определяет, как к этому члену можно получить дос-

туп. Спецификатор доступа необязателен, и, если он не указан, подразумева-

ется, что этот член закрыт (private). Члены с закрытым доступом (закрытые члены)

могут использоваться только другими членами своего класса. Мето-

ды — это процедуры (подпрограммы), которые манипулируют данными, определен-

ными в классе, и во многих случаях обеспечивают доступ к этим данным. Обычно

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

Любой метод содержит одну или несколько инструкций. Каждый метод имеет имя, и именно это

имя используется для его вызова. Имена методов в тексте этой книги сопровождаются парой круглых скобок Формат записи метода такой:

доступ тип_возврата имя(список_параметров) {

// тело метода

}

С помощью элемента тип_возврата указывается тип значения, возвращаемого

методом. Конструктор инициализирует объект при его создании. Он имеет такое же имя,

что и сам класс, а синтаксически подобен методу. Однако в определении конструкто-

ров не указывается тип возвращаемого значения. Формат записи конструктора такой:

доступ имя_класса{) {

// тело конструктора

Обычно конструктор используется, чтобы придать переменным экземпляра, опре-

деленным в классе, начальные значения или выполнить исходные действия, необхо-

димые для создания полностью сформированного объекта. Кроме того, обычно в ка-

честве элемента доступ используется модификатор доступа public, поскольку конст-

рукторы, как правило, вызываются вне их класса. Средства языка С# позволяют определить метод, который должен вызываться непосредственно перед тем, как объект будет окончательно разрушен системой сбора

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

чения гарантии "чистоты" ликвидации объекта. Например, вы могли бы использовать

деструктор для гарантированного закрытия файла, открытого некоторым объектом.

Формат записи деструктора такой:

~имя_класса() {

// код деструктора

}

Чтобы добавить деструктор в класс, достаточно включить его как член. Он вызыва-

ется в момент, предшествующий процессу утилизации объекта. В теле деструктора вы

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

разрушением объекта. В заключение стоит представить ключевое слово t h i s . При. вызове метода ему ав-

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

ссылку на вызывающий объект (т.е. объект, для которого вызывается метод). Эта

ссылка и называется ключевым словом t h i s . На-

пример, синтаксис С# допускает, чтобы имя параметра или локальной переменной

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

скрывать переменную экземпляра. И тогда доступ к скрытой переменной экземпляра

можно получить с помощью ссылки this.

Свойство — это второй специальный тип членов класса, о котором мы собирались

поговорить в этой главе. Свойство включает поле и методы доступа к этому полю.

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

но программист при этом хочет осуществлять управление операциями, разрешенными к

выполнению над этим полем. Например, по некоторым обстоятельствам вы желаете ог-

раничить диапазон значений, которые можно присваивать этому полю. Свойства во многом напоминают индексаторы. Свойство состоит из имени и пары

аксессоров (get и set). Аксессоры используются для чтения содержимого перемен-

ной и записи в нее нового значения. Основное достоинство свойства состоит в том,

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

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

get- и set-аксессоры. Формат записи свойства таков:

ТИП ИМЯ{

get{

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

}

set{

// код аксессора записи поля

} На использование свойств налагаются довольно серьезные ограничения. Во-

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

методу в качестве ref- или out-параметра. Во-вторых, свойство нельзя перегружать.

(Но при необходимости вы можете иметь два различных свойства, которые исполь-

зуют одну и ту же базовую переменную, но к такой организации свойств прибегают

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

вызове get-аксессора, хотя несоблюдение этого правила компилятор обнаружить не в

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]