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


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

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

Интерфейсы CTS
Создание составных элементов управления
Создание обработчика для группы событий
Изменение меню во время выполнения
Применение типов .NET Framework в приложениях
Компонент PrintDocument
Рекурсия
Классы и структуры
Реализация членов интерфейса на Visual Basic .NET
Применение объектов DataSet и обновление данных
Реализация специальных возможностей на этапе проектирования
Параметры компоновки установочной программы
Обработка ошибок при обновлении базы данных
Применение типов данных
Модификаторы доступа к членам
| .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 31


     



Rambler's Top100

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

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