Каша # С # --- Уровни доступности
Характеристики классов CTS
Запечатанные ---- Запечатанные (sealed), или герметизированные, классы не могут выступать в роли базовых для других классов, т.е. не допускают наследования
Реализующие интерфейсы --- Интерфейсом(interface) называется коллекция абстрактных членов, которые обеспечивают возможность взаимодействия между объектом и пользователем этого объекта. CTS позволяет реализовать в классе любое количество интерфейсов
Абстрактные или конкретные --- Экземпляры абстрактных(abstract) классов немогут создваваться напрямую, и предназначены для определеня общих аспектов поведения для производных типов. Экземпляры же конеретных (concrete) классы могут создаваться напрямую
Степень видимости ---Каждый класс должен конфигурироваться с атрибутом видимости(visibility). По сути, этот атрибут указывает, должен ли класс быть доступным для использования внешним сборкам или только изнутри определяющей сборки
class MyClass { // }
после определения класса его экземпляр можно создавать в любом месте проекта, где имеется доступ к этому определению. По умолчанию классы объявляются внутренними, что делает их доступными только для кода, который наодится внутри текущего проекта. Объявлять их таковыми можно явно с использованием ключевого слова internal, как показано ниже(хотя это делать не обязательно):
internal class MyClass { // }
В качестве альтернативного варианта можно указывать, что класс является общедоступным и должен быть также доступен и в коде других проектов. Для этого нужно использовать ключевое слово public, как показано ниже:
public class MyClass { // } Классы, объявляемые сами по себе, подобно этому, не могут быть ни приватными, ни защищенными но классы, объявляемые членами других классов, могут делать таковыми с помощью соответствующих модификаторов.
Помимо этих двух ключевых слов, играющих роль модификатора доступа, можно использовать либо ключевое слово abstract и тем самым делать класс абстрактным(т.е. не допускающим создания экземпляров, позволяющим только наследовать от него другие классы и способным иметь абстрактные члены), либо ключевое слово sealed и тем самым сделать класс герметизированным( не допускающим наследоване от него никаких других классов). Эти два ключевых слова являются взаимно исключающими, т.е. указывать можно тлько какое-то одно из них. В частности, абстрактный класс объявляется следующим образом: public abstract class MyClass { // } здесь MyClass представляет собой общедоступный абстрактный класс, хотя внутренние абстрактные классы тоже допускается создавать.
герметизированные классы объявляются следующим образом:
public sealed class MyClass { // } Наследование тоже может задаваться в определении класса. Делается это добавлением после имени класса двоеточия со следующим за ним именем базового класса, как показано ниже:
public class MeClass: MyBase { // }
В определения классов разрешено указывать только один базовый класс и в случае наследования от абстрактного класса нужно обязательно реализовать все наследуемые абстрактные члены(если только производный класс тоже не является абстрактным). Компилятор не допускает, чтобы производный класс был более доступным, чем его бызовый класс. Это означает, что внутренний класс может наследоваться от общедоступного класса, а вот общедоступный класс от внутреннего базового - нет.
допустимый код
public class MyBase { // }
interal class MyClass : MyBase { // }
не допустимый
interal class MyBase
{
//
}
public
class MyClass : MyBase
{
//
}
____________________________________________ модификатор
Отсутствует или internal ---Класс, к которому может быть получен доступ только из текущего проекта
public --- Класс, к которому может быть получен доступ из любого места
abstract или internal abstrct ---- Класс, к которому может быть получен доступ только из текущего проекта, и которй не доускает создания экземпляров, т.е. позволяет создавать только производные классы
public abstract Класс, к которому может быть получен доступ из любого места, и который не допускает создания жкземпляров, т.ею позволяет создавать тлько производные классы
sealed или internal sealed Класс, к которому может быть получен доступ только из текущего проекта, и который не допускает создания производных классов, т.е. допускает создание только экзепляров
public sealed --- Класс, к которому может быть получен доступ из любого места, и который не допускает создания производных классов т.е. допускает создание только экземпляров
___________________________________________ public(общедоступный)-делает члены доступными из любого кода. private(приватный)-делает члены доступными только из того кода, который является частью данного класса(используется по умолчанию, если не указывается никакое ключевое слово). internal(внутренний)-делает члены доступными только из кода проекта(сборки), внутри которого они определяются. protected(защищенный)-делает члены доступными только из того кода, который является частью либо данного класса, либо класса, производного от него.
Два последних ключевых слова могут комбинироваться, т.е. также существуют и члены protected internal. Такие члены доступны только из классов, которые являются производными от кода, содержащегося внутри проекта(а точнее -внутри сборки).
Поля, методы и свойтва могут также объявляться с применением ключевого слова static и в таком случае являются статическими членами, принадлежащими классу, а не экземплярам объектов.
|
Категория: Каша | Добавил: mdErrDX5341 (21.07.2011)
|
Просмотров: 1296
| Рейтинг: 0.0/0 |
Добавлять комментарии могут только зарегистрированные пользователи. [ Регистрация | Вход ]
|