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


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



Защищенные члены
8 февраля 2009

С уровнями доступа к членам классов вы познакомились в главе 1: члены, объяв-
ленные с уровнем доступа Public (public), доступны из любой части приложения, в
том числе из внешних классов; члены с уровнем доступа Friend или internal доступ-
ны только членам из локальной сборки, но не из внешних сборок; члены с уровнем
доступа Private (private) доступны только в пределах класса и не доступны никаким
другим классам, в том числе и производным от класса, в котором объявлен этот
член. Остальные два уровня доступа, Protected (protected) и Protected Friend (protected
internal), подробно не обсуждались в главе 1.
Области видимости членов классов, объявленных с ключевыми словами Protected
(protected) и Private (private), совпадают за исключением того, что в первом случае
члены доступны и производным классам. Рассмотрим следующий пример;
Visual Basic .NET
' В базовом классе определены два метода:
с уровнями доступа private и protected.
Public Class BaseClass
Метод с уровнем доступа private нельзя вызывать
' из производных классов..,
Private Sub HethodK)
Реализация опущена
End Sub
...а метод с уровнем доступа protected
из производных классов вызывать можно.
Protected Sub Method2()
Реализация опущена
End Sub
End Class
' Класс, производный от BaseClass
Public Class InheritedClass
Inherits BaseClass
Public Sub OernoO
1 Такой вызов допустим, поскольку уровень доступа protected
' не запрещает доступ к члену, объявленному в BaseClass,
Me.Method2()
' а этот вызов приведет к ошибке компиляции, поскольку он
' обращается к члену базового класса, объявленному
' с уровнем доступа private.
Me.Method1()
End Sub
End Class
Visual C#
// В базовом классе определены два метода:
// с уровнями доступа private и protected,
public class BaseClass
// Метод с уровнем доступа private нельзя вызывать
// из производных классов...
private void Method"! ()
// Реализация опущена
// Класс, производный от BaseClass
public class InheritedClass : BaseClass
{
public void Demo()
{
// Такой вызов допустим, поскольку уоовень доступа protected
// не запрещает доступ к члену, обьявленному в BaseClass,
this.Method2();
// а этот вызов приведет к ошибке компиляции, поскольку он
// обращается к члену базового класса, объявленному
// с уровнем доступа private.
this. Hethod1();
Здесь иллюстрируется различие закрытых и защищенных членов. Метод Demo
попытается вызвать методы Method! и Melhod2 при помощи ссылки на экземпляр
класса InheritedClass (через ключевое слово Me [this]). Поскольку оба этих метода
определены в базовом классе, возможность их вызова определяется уровнями досту-
па, с которыми они объявлены. Вызов метода Method2 завершается успешно, так
как он объявлен с модификатором Protected (protected), а метод Method!, объявлен-
ный с модификатором Private (private), производным классам не доступен.
Уровень доступа Protected Friend (protected internal) представляет собой «гибрид*-
модификаторов Protected (protected) и Friend (internal). Поэтому член класса, объяв-
ленный с модификатором Protected Friend (protected internal), доступен членам этого
класса и других классов, расположенных в той же сборке с этим классом, а также
членам своих производных классов.

Теги: .NET

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

Структуры CTS
Наборы
Объект Graphics
Набор Listeners
Отладка элементов управления
Наследование от абстрактного класса
Применение событий формы
Интерфейсы как средство достижения полиморфизма
Создание поддержки печати
Общеязыковая исполняющая среда
Сокрытие членов базового класса в Visual C#
Создание абстрактных членов
ToDoList 5.6.6
Динамические свойства
Объявление методов
| .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 | Защищенные члены. Регион сайта: Москва и Санкт-Петербург