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

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

Типы данных .NET Framework
Создание производных элементов управления
Тестирование элемента управления
Компиляция и исполнение .NET-приложений
Обработка исключений и императивная защита
Ссылки на внешние библиотеки
Boost – версия 1.36.0
Обзор .NET Framework
Автоматизация разработки
Решения .NET
Классы CTS
Анти-паттерны в действии или Самые популярные ошибки программистов
Вложенные типы
.NET Framework и языки программирования
Towards Cleaner Code II, a C# GUI Invoke/Async Helper
| .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


     



Rambler's Top100

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

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