Компьютерные книги
Главное меню
Главная Поиск по сайту Добавить материал О нас Карта книг Карта сайта
Реклама
computersbooks.net -> Добавить материал -> Языки программирования -> Ватсон К. -> "С#" -> 104

С# - Ватсон К.

Ватсон К. С# — Лори, 2005 . — 879 c.
ISBN 1-861004-98-2
Скачать (прямая ссылка): vatsonc2005.pdf
Предыдущая << 1 .. 98 99 100 101 102 103 < 104 > 105 106 107 108 109 110 .. 404 >> Следующая


Из этого окна мы можем непосредственно' изменять многие Свойства, напрнмер, уровень доступности, посредством свойства Access (доступ) (оно выделено на рисунке). В этом случае код будет модифицирован автоматически — н не придется ничего набирать на клавиатуре.

Обратите внимание, что свойство CanOvenide (может переопределяться) позволяет определить, является ли член виртуальным, a IsShared (с разделением доступа) — является ли он статическим.

Некоторые дополнительные темы, касающиеся членов класса

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

? Сокрытие методов базового класса

? Вызов переопределенных или скрытых методов базового класса

? Вложенные определения типов
214

Глава 10

Сокрытие методов базового класса

При наследовании некоторого (не абстрактного) члена базового класса наследуется также и его реализация. Если наследуемый член является виртуальным, то имеется возможность переопределить его реализацию, воспользовавшись ключевым словом override. Независимо от того, является ли наследуемый член виртуальным, прн необходимости можно скрыть его реализацию. Это полезно, например, если наследуемый обший член работает не так, как требуется.

Сокрытие достигается использованием следующего кода:

public class HyBaaaClasa

f

public void DoSomething()

<

U Базовая реализация

)

) ' public claee Ц/Der ivedClass : MyBaseClass {

public void DoSoraethinS <)

{

- // Реализация в производном классе, скрываюяая базовую реализация

)

Хотя такой код будет работать нормально, он сгенерирует предупреждение о том, что в нем скрывается член базового класса. Это дает возможность исправить положение дел, еслн мы случайно скрыли член, который на самом деле желаем использовать. Если же этот член действительно требуется скрыть, то об этом можно сказать явно, воспользовавшись ключевым словом new:

public class MyDerivedCiass : MyBaseClass . new public void DoSomething О {

I! Реализация в производном классе, схрывввцая базовую реализацию

J

)

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

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

public claee MyBaseClass {

public virtual void DoSomething ()

______

. Console.WriteLine\'Вазовая реализация*)г

)

, >

public class ftyDerivedClass : MyBaseClass {

public override void DoSomething ()

Console.WriteLine{'Производная реализация');

)
Определение членов классов

215

В данном случае переопределенный метод заменяет собой реализацию базового класса, так что в следующем коде будет использоваться новая версия, несмотря на то, что обращение к методу происходит через тип базового класса (с использованием полиморфизма):

HyDerivedClasa myObj ¦ new MyDerivedCiass О;

MyBaseClass я^В!. e©bj; '

myBaeeObj « nryObji myBaeeObj, DoSome thing О;

В данном случае выходной поток будет следующим:

Производная реализация

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

public class MyBaseClass {

public virtual void DoSomethingO {

Console.HzriteLine ('Базовая реализация');

>

)

public class MyDerivedCiass : MyBaseClass

<

new public void DoSomethingO

(

Console .WriteLine ('Производная реализация') ;

>

)

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

Базовая реализация

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

Вызов переопределенных или скрытых методов базового класса

Независимо от того, переопределяем ли мы некоторый член нли делаем его скрытым, по-прежнему остается возможность доступа к члену базового класса внутри данного класса. Существует множество различных ситуаций, когда это оказывается полезным, например:

? Если требуется скрыть наследуемый общий член

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

? Если требуется что-либо добавить к реализации наследуемого виртуального члена, а не просто заменить ее на новую переопределенную реализацию.

Для достижения подобного эффекта можно воспользоваться ключевым словом base, которое указывает на реализацию базового класса, содержащуюся внутри
216

Глава 10

производного класса (аналогично тому, как оно используется в управляющих конструкторах, с которыми вы познакомились в предыдущей главе). Например: .

public class MyBaseClass (

public virtual void DoSomething!)

{

// Вазовая реализация

Предыдущая << 1 .. 98 99 100 101 102 103 < 104 > 105 106 107 108 109 110 .. 404 >> Следующая
Книги
Web-программирован-
ие
Аппаратное обеспечение Графика Руководство по П.О. Самоучитель Теория программирования Фотошоп Языки программирования
Новые книги
Вирт Н. "Систематическое программирование " (Теория программирования)

Эком "Microsoft Excel 2000 шаг за шагом Русская версия самоучитель " (Самоучитель)

Поляков А.Ю. "Методы и алгоритмы компьютерной графики в примерах Vizual C++" (Графика)

Баяковский Ю.М. "Графическая библиотека Open GL " (Графика)

Валиков А. "Технология " (Языки программирования)
Авторские права © 2013 ComputersBooks. Все права защищены.