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


* При перепечатке материалов ссылка на 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

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

Реализация членов интерфейса на Visual C#
Компиляция и исполнение .NET-приложений
Реализация свойств
Объявление методов
Применение классов Debug и Trace
Настройка установочной программы
Применение событий формы
Ресурсы и ресурсные сборки
Реализация полиморфизма через интерфейсы
Применение наборов элементов управления
Компонент PrintDocument
Создание обработчика для группы событий
Работа с элементами управления
Распространение приложений через Интернет
Примеси (mixin)
| .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 | Обеспечение совместимости с замещенными или скрытыми членами. Регион сайта: Москва и Санкт-Петербург