Читаем Полное руководство. С# 4.0 полностью

Прежде всего обратите внимание на использование ключевого слова new в следую щей строке кода. new int i; // этот член скрывает член i из класса А

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

Вот к какому результату приводит выполнение приведенного выше кода. Член i в производном классе: 2

В классе В определяется собственная переменная экземпляра i, которая скрывает переменную i из базового класса А. Поэтому при вызове метода Show для объек та типа В выводится значение переменной i, определенной в классе В, а не той, что определена в классе А. Применение ключевого слова base для доступа к скрытому имени

Имеется еще одна форма ключевого слова base, которая действует подобно клю чевому слову this, за исключением того, что она всегда ссылается на базовый класс в том производном классе, в котором она используется. Ниже эта форма приведена в общем виде: base.член

где член может обозначать метод или переменную экземпляра. Эта форма ключевого слова base чаще всего применяется в тех случаях, когда под именами членов произво дного класса скрываются члены базового класса с теми же самыми именами. В качестве примера ниже приведен другой вариант иерархии классов из предыдущего примера. // Применение ключевого слова base для преодоления // препятствия, связанного с сокрытием имен. using System; class А { public int i = 0; } // Создать производный класс. class В : А { new int i; // этот член скрывает член i из класса А public В(int a, int b) { base.i = а; // здесь обнаруживается скрытый член из класса А i = b; // член i из класса В } public void Show { // Здесь выводится член i из класса А. Console.WriteLine("Член i в базовом классе: " + base.i); // А здесь выводится член i из класса В. Console.WriteLine("Член i в производном классе: " + i); } } class UncoverName { static void Main { В ob = new В(1, 2); ob.Show; } }

Выполнение этого кода приводит к следующему результату. Член i в базовом классе: 1 Член i в производном классе: 2

Несмотря на то что переменная экземпляра i в производном классе В скрывает переменную i из базового класса А, ключевое слово base разрешает доступ к перемен ной i, определенной в базовом классе.

С помощью ключевого слова base могут также вызываться скрытые методы. Например, в приведенном ниже коде класс В наследует класс А и в обоих классах объявляется метод Show. А затем в методе Show класса В с помощью ключевого слова base вызывается вариант метода Show, определенный в классе А. // Вызвать скрытый метод. using System; class А { public int i = 0; // Метод Show в классе A public void Show { Console.WriteLine("Член i в базовом классе: " + i); } } // Создать производный класс. class В : А { new int i; // этот член скрывает член i из класса А public В(int a, int b) { base.i = а; // здесь обнаруживается скрытый член из класса А i = b; // член i из класса В } // Здесь скрывается метод Show из класса А. Обратите // внимание на применение ключевого слова new. new public void Show { base.Show; // здесь вызывается метод Show из класса А // далее выводится член i из класса В Console.WriteLine("Член i в производном классе: " + i); } } class UncoverName { static void Main { В ob = new В(1, 2); ob.Show; } }

Выполнение этого кода приводит к следующему результату. Член i в базовом классе: 1 Член i в производном классе: 2

Как видите, в выражении base.Show вызывается вариант метода Show из ба зового класса.

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

В представленных до сих пор примерах программ использовались простые иерар хии классов, состоявшие только из базового и производного классов. Но в C# мож но также строить иерархии, состоящие из любого числа уровней наследования. Как упоминалось выше, многоуровневая иерархия идеально подходит для использования одного производного класса в качестве базового для другого производного класса. Так, если имеются при класса, А, В и С, то класс С может наследовать от класса В, а тот, в свою очередь, от класса А. В таком случае каждый производный класс наследует ха рактерные особенности всех своих базовых классов. В частности, класс С наследует все члены классов В и А.

Перейти на страницу:

Похожие книги

Основы программирования в Linux
Основы программирования в Linux

В четвертом издании популярного руководства даны основы программирования в операционной системе Linux. Рассмотрены: использование библиотек C/C++ и стан­дартных средств разработки, организация системных вызовов, файловый ввод/вывод, взаимодействие процессов, программирование средствами командной оболочки, создание графических пользовательских интерфейсов с помощью инструментальных средств GTK+ или Qt, применение сокетов и др. Описана компиляция программ, их компоновка c библиотеками и работа с терминальным вводом/выводом. Даны приемы написания приложений в средах GNOME® и KDE®, хранения данных с использованием СУБД MySQL® и отладки программ. Книга хорошо структурирована, что делает обучение легким и быстрым. Для начинающих Linux-программистов

Нейл Мэтью , Ричард Стоунс , Татьяна Коротяева

ОС и Сети / Программирование / Книги по IT
97 этюдов для архитекторов программных систем
97 этюдов для архитекторов программных систем

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

Билл де Ора , Майкл Хайгард , Нил Форд

Программирование, программы, базы данных / Базы данных / Программирование / Книги по IT
Программист-прагматик. Путь от подмастерья к мастеру
Программист-прагматик. Путь от подмастерья к мастеру

Находясь на переднем крае программирования, книга "Программист-прагматик. Путь от подмастерья к мастеру" абстрагируется от всевозрастающей специализации и технических тонкостей разработки программ на современном уровне, чтобы исследовать суть процесса – требования к работоспособной и поддерживаемой программе, приводящей пользователей в восторг. Книга охватывает различные темы – от личной ответственности и карьерного роста до архитектурных методик, придающих программам гибкость и простоту в адаптации и повторном использовании.Прочитав эту книгу, вы научитесь:Бороться с недостатками программного обеспечения;Избегать ловушек, связанных с дублированием знания;Создавать гибкие, динамичные и адаптируемые программы;Избегать программирования в расчете на совпадение;Защищать вашу программу при помощи контрактов, утверждений и исключений;Собирать реальные требования;Осуществлять безжалостное и эффективное тестирование;Приводить в восторг ваших пользователей;Формировать команды из программистов-прагматиков и с помощью автоматизации делать ваши разработки более точными.

А. Алексашин , Дэвид Томас , Эндрю Хант

Программирование / Книги по IT