Доступность членов
Доступность членов
Прежде чем двигаться дальше, мы должны обсудить вопрос доступности, или "видимости" членов. Члены (методы, поля, конструкторы и т.д.) данного класса или структуры должны указать свой уровень доступности. Если член определяется без указания ключевого слова, характеризующего доступность, этот член по умолчанию определяется как private. В C# используются модификаторы доступности методов, перечисленные в табл. 3.4.
Вы, наверное, уже знаете, что доступ к открытым членам можно получить с помощью объектной ссылки, используя операцию, обозначаемую точкой (.). Приватные члены недоступны извне по объектной ссылке, но могут вызываться объектами внутри, чтобы экземпляр мог выполнить свою работу (т.е. это частные вспомогательные функции).
Таблица 3.4. Ключевые слова C#, указывающие уровень доступности
Модификатор доступности C# Описание public (открытый, общедоступный) Помечает метод, как доступный из объектной переменной, а также из всех производных классов private (частный, приватный) Помечает метод, как доступный только из класса, определяющего этот метод. В C# любой член по умолчанию определяется, как private protected (защищенный) Помечает метод, как доступный для определяющего класса, а также для любого производного класса. Однако защищенные методы не доступны из объектной переменной internal (внутренний) Определяет метод, как доступный для любого типа только внутри данного компоновочного блока, но не снаружи protected internal (внутренний защищенный) Определяет метод, доступ к которому ограничивается рамками текущего компоновочного блока или типами, созданными из определяющего класса в данном компоновочном блокеЗащищенные члены оказываются полезными только при создании иерархии классов, что будет темой обсуждения главы 4. Что касается внутренних, и защищённых членов, то они обычно используются при создании библиотек программного кода .NET (например, управляемых библиотек *.dll, что будет обсуждаться в главе 11).
Чтобы проиллюстрировать применение указанных ключевых слов, создадим класс (SomeClass), в котором используются все указанные модификаторы доступности членов.
// Опции доступности членов.
class SomeClass {
// Доступен везде.
public void PublicMethod() {}
// Доступен только из типов SomeClass.
private void PrivateMethod() {}
// Доступен из SomeClass и потомков.
protected void ProtectedMethod() {}
// Доступен только в рамках данного компоновочного блока.
internal void InternalMethod() {}
// Защищенный доступ внутри компоновочного блока.
protected internal void ProtectedInternalMethod() {}
// В C# при отсутствии явных указаний
// члены по умолчанию считаются приватными.
void SomeMethod(){}
}
Теперь, создав экземпляр класса SomeClass, попытаемся вызвать каждый из его методов, используя операцию, обозначаемую точкой.
static void Main(string[] args) {
// Создается объект и выполняется попытка вызова членов.
SomeClass с = new SomeClass();
c.PublicMethod();
с.InternalMethod();
с.ProtectedInternalMethod();
с.PrivateMethod(); // Ошибка!
с.ProtectedMethod(); //Ошибка!
с.SomeMethod(); // Ошибка!
}
Если скомпилировать эту программу, вы обнаружите, что защищенные и частные члены вне объекта не доступны.
Исходный код. Проект MemberAccess размещен в подкаталоге, соответствующем главе 3.
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКЧитайте также
1.3.1 Доступность TCP/IP
1.3.1 Доступность TCP/IP Когда наличие TCP/IP стало обязательным требованием для всех компьютеров, закупаемых Министерством обороны США, разработчикам пришлось заняться реализацией TCP/IP для обеспечения условий правительственных поставок. На рис. 1.2 показано, как с помощью TCP/IP
Доступность целевых групп
Доступность целевых групп Исследуя аудиторию Интернета, мы обнаруживаем, что его пользователи начинают постепенно отказываться от других источников получения информации. Активные пользователи Интернета не читают газет, не смотрят телевизор, не слушают радио. Все, что
Поиск членов
Поиск членов Предположим, вы не помните, какой из модулей программного кода содержит нужную вам процедуру или какой из объектов имеет определенный метод или событие. Вместо того чтобы в этом случае копаться в своих модулях с помощью окна проводника проекта или вызывать
Определение членов класса
Определение членов класса Все члены класса по характеру доступа к ним делятся на четыре категории: закрытые (private), защищенные (protected), открытые (public) и опубликованные (published).Элементы класса, определенные в разделе public, без каких-либо ограничений открыты для доступа извне
Доступность типов
Доступность типов Типы (классы, интерфейсы, структуры, перечни и делегаты) также могут использовать модификаторы доступности, но только public или internal. Когда вы создаете общедоступный тип (public), то гарантируете, что он будет доступным для других типов как в текущем
Тестирование переопределенных членов
Тестирование переопределенных членов Теперь можно проверить обновленный класс Person. Добавьте следующий программный код в метод Main() и сравните результат его выполнения с тем, что показано на рис. 3.18.static void Main (string[] args) { // ВНИМАНИЕ: эти объекты должны быть идентичными. Person
Определение членов типов в CIL
Определение членов типов в CIL Вы уже знаете, что типы .NET могут определить различные члены. Перечни содержат некоторый набор пар имен и значений. Структуры и классы могут иметь конструкторы, поля, методы, свойства, статические члены и т.д. В предыдущих 14 главах вы уже могли
Определение параметров членов
Определение параметров членов Теперь предположим, что нужно определить методы, имеющие аргументы. По сути, указание аргументов в CIL (приблизительно) соответствует аналогичной операции в C#. Например, аргумент определяется с помощью указания типа данных после имени
14.5. Список инициализации членов
14.5. Список инициализации членов Модифицируем наш класс Account, объявив член _name типа string:#include stringclass Account {public:// ...private:unsigned int _acct_nmbr;double _balance;string _name;};Придется заодно изменить и конструкторы. Возникает две проблемы: поддержание совместимости с первоначальным
17.2. Идентификация членов иерархии
17.2. Идентификация членов иерархии В разделе 2.4 мы уже упоминали о том, что в объектном проектировании обычно есть один разработчик, который конструирует и реализует класс, и много пользователей, применяющих предоставленный открытый интерфейс. Это разделение
18.3.2. Открытие отдельных членов
18.3.2. Открытие отдельных членов Когда мы применили закрытое наследование класса PeekbackStack от IntArray, то все защищенные и открытые члены IntArray стали закрытыми членами PeekbackStack. Было бы полезно, если бы пользователи PeekbackStack могли узнать размер стека с помощью такой
8.5.9 Видимость Имен Членов
8.5.9 Видимость Имен Членов Члены класса, описанные с ключевым словом class, являюся закрытыми, то есть, их имена могут использоваться только функциями членами (#8.5.2) и друзьями (см. #8.5.10), если они не стоят после метки «public:». В этом случае они являются открытыми. Открытый член
Web доступность и Joomla!
Web доступность и Joomla! Важность доступности и удобства (web accessibility) веб страниц сложно переоценить. Во многих странах эта тема регулируется специальными правилами. Полную доступность и дружественность к пользователю, однако, достаточно сложно достичь. Но к этому нужно
Заключение. Копирайт и доступность
Заключение. Копирайт и доступность — Слышал новость? Брежнева посадили! — Не может быть! — Только что по радио передали: «И в заключении Леонид Ильич Брежнев сказал…» Бородатый анекдот Основные способы распространения программного обепечения и медиа-контента в России