Имя Пароль
Зарегистрироваться


* При перепечатке материалов ссылка на www.SeoLiga.ru обязательна! RSS



Обеспечение совместимости с замещенными или скрытыми членами
8 февраля 2009

Реализация замещенного или скрытого члена базового класса становится недоступ-
ной, ее заменяет новая реализация, возможно, обладающая совершенно иными ха-
рактеристиками, что иногда серьезно влияет на взаимодействие с другими объекта-
ми. Объект, вызывающий функцию MyMethod, объявленную в предыдущем приме-
ре, ожидает значение типа String, а если функция вернет Integer, возможно возник-
новение ошибки. Поэтому следует очень осторожно применять замещение и со-
крытие членов и прибегать к подобным приемам, только когда вы полностью уве-
рены, что они не нарушат совместимость.
В некоторых случаях получить доступ к реализации замешенных или скрытых
членов базового класса все же удается. Откуда будет вызван член — из баювого
класса или из производного — зависит от типа переменной, а не от объекта, как в
случае переопределенного члена. Рассмотрим следующий пример:
Visual Basic .NET
В этом примере используются классы MyBaseClass и MylnheritedClass,
1 определенные в предыдущем примере кода.
Dim X As New MyInheritedClass()
Dim Y As MyBaseClass
' flepevenHb-e X и Y теперь ссылаются на один и тот же объект,
' но типы этих переменных отличаются.
Y = X
Тип переменной X - MylnheritedClass, поэтому в
1 следующей строке будет вызван >-лен из производного класса.
X.MyMethodC'A String")
Тип геременной Y - MyBaseClass, поэтому в следующей строке
1 будет вызвана реализация из базового юасса.
Y.MyMethod(42)
Visual C#
// В этом примере используются классы MyBaseClass л MylnheritedClass,
// определенные в предыдущем примере кода.
MylnheritedClass X - new MylnheritedClassO;
MyBaseClass Y;
// Переменные X и Y теперь ссылаются на один и тот же объект,
// но типы этих переменных отличаются,
Y = X;
// Тип переменной X -- MylnheritedClass, поэтому
// в следующей строке будет вызван член из производного класса.
X.MyMethod(42);
// Тип переменной Y -- MyBaseClass, поэтому в следующей строке
// будет вызвана реализация из базового класса.
Y.MyMethod(42);
Как вы видите, именно тип переменной определяет, будет ли вызван замешаю-
щий член из производного класса, или исходный член из базового класса. Это по-
зволяет модифицировать реализацию члена, не нарушая принципа полиморфизма.
При объявлении производных классов новая реализация для замещенных или
скрытых членов не наследуется, производному классу передается реализация соот-
ветствующих членов из базового класса.
> Как заместить (скрыть) член базового класса
• Visual Basic .NET: объявите новый член с ключевым словом Shadows и напишите
для него реализацию. У нового члена возможна другая сигнатура, уровень дос-
тупа и тип возвращаемого значения, это может быть даже член другого типа.
• С#: объявите новый член с ключевым словом new и напишите для него реализа-
цию. У нового члена должны быть такие же сигнатура и тип, что и у скрытого,
но уровень доступа и тип возвращаемого значения могут отличаться.

Теги: .NET

Статьи по теме:

Объявление и генерация событий
Извлечение типизированных данных с помощью объекта DataReader
Системные кисти, перья и цвета
Оптимизация средствами компилятора
Извлечение из сопутствующих сборок ресурсов, специфичных для культуры
Декларативная защита, основанная на ролях
Работа с классом Help
Использование провайдеров дополнительных свойств
Интерфейсы как средство достижения полиморфизма
Структуры CTS
Редактор пользовательского интерфейса
Принципы разработки пользовательского интерфейса
Создание перегруженных методов
Специальные возможности и элементы управления Windows Forms
Языки программирования .NET
| .NET | Pavel |
 


Пн Вт Ср Чт Пт Сб Вс
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30


     



Rambler's Top100

Данный сайт или домен продается ICQ: 403-353-727

© 2009 Seoliga.ru | .NET | Обеспечение совместимости с замещенными или скрытыми членами. Регион сайта: Москва и Санкт-Петербург