Модификаторы JScript
Модификаторы JScript определяют поведение и видимость классов, интерфейсов и членов классов или интерфейсов. Модификаторы можно использовать при определении классов и интерфейсов, но обычно это не обязательно.
Модификаторы видимости
Модификаторы видимости определяют возможность доступа внешнего кода к классам, интерфейсам и их членам. Можно использовать ограничения, чтобы поощрять применение грамотных методик программирования, запретив вызовы специализированных внутренних методов и полей.
По умолчанию любой код, имеющий доступ к классу, имеет доступ к членам этого класса. С помощью модификаторов видимости можно выборочно запретить внешнему коду доступ к определенным членам класса и разрешить доступ только классам из того же пакета или производным классам.
Модификаторы видимости нельзя применять к глобальным функциям и переменным. Совместно можно использовать всего два модификатора видимости: protected и internal.
Модификатор видимости |
Область применения |
Значение |
---|---|---|
класс, член класса, интерфейс, член интерфейса или перечисления |
Член является видимым без ограничений для любого кода, имеющего доступ к классу. По умолчанию в JScript классы, интерфейсы и их члены имеют модификатор public, то есть являются открытыми. |
|
член класса |
Член является видимым только в пределах класса, в котором он объявлен. Он невидим для производных классов. Код за пределами текущего класса не может получить доступ к членам с модификатором private. |
|
член класса |
Член является видимым только в пределах класса, в котором он объявлен, и во всех производных классах этого класса. Член с модификатором protected нельзя использовать для классов области пакета, но можно использовать для вложенных классов. |
|
класс, член класса, перечисление |
Класс, член класса или перечисление являются видимыми везде внутри пакета, в котором они объявлены. Они невидимы за пределами пакета. |
Модификаторы наследования
Модификаторы наследования управляют тем, как методы и свойства из производных классов переопределяют свойства и методы базового класса. Благодаря такому управлению можно указывать, будут ли методы производных классов переопределять созданный пользователем класс.
По умолчанию методы производного класса переопределяют методы базового класса в том случае, если в производном классе не используется атрибут безопасности версий hide. Этот атрибут позволяет запретить переопределение. С помощью модификаторов наследования можно определять, будут ли отдельные методы переопределяться всегда или никогда.
В некоторых ситуациях может потребоваться запретить переопределение метода базового класса. Например, при определении класса в пакете можно использовать модификатор final, чтобы запретить производным классам изменять методы и свойства данного класса.
С другой стороны, может потребоваться переопределять некоторые методы класса. Например, можно создать класс, в котором предоставляются определенные базовые функциональные возможности, но для остальных методов используется модификатор abstract. Реализовать абстрактные методы предоставляется разработчику производного класса.
Модификаторы безопасности версий, которые также управляют переопределением, осуществляют это управление со стороны не базового, а производного класса. Модификаторы безопасности версий применимы только в том случае, если переопределяемые методы базового класса не имеют модификаторов наследования.
Нельзя одновременно использовать два модификатора наследования или объединять модификатор наследования с модификатором static.
Модификатор наследования |
Область применения |
Значение |
---|---|---|
Класс, метод или свойство |
В случае методов или свойств этот модификатор указывает, что член не имеет реализации. В случае классов этот модификатор указывает, что в классе содержится один или несколько нереализованных методов. Невозможно создать экземпляр абстрактного класса или класса, содержащего абстрактные члены, с помощью ключевого слова new, однако такой класс можно использовать в качестве базового. |
|
Класс, метод или свойство |
Используется для классов, которые нельзя расширить, или методов, которые нельзя переопределить. Использование модификатора final позволяет запретить производным классам изменять поведение базового класса посредством переопределения важных функций. Методы, помеченные модификатором final, можно скрыть или перегрузить, но их нельзя переопределить. |
Модификаторы безопасности версий
С помощью модификаторов безопасности версий можно управлять методами производного класса, которые переопределяют методы базового класса. Благодаря такому управлению можно указывать, будет ли создаваемый класс переопределять методы базового класса.
По умолчанию методы производного класса переопределяют методы базового класса, хотя переопределение можно также запретить с помощью модификаторов наследования в определении производного класса. Благодаря модификаторам безопасности версий можно указывать, будут ли переопределяться отдельные методы.
В некоторых ситуациях может потребоваться запретить переопределение методов базового класса. Например, можно расширить класс, чтобы изменить поведение методов базового класса. Если требуется запретить переопределение этих методов базового класса, можно использовать модификатор hide в объявлениях методов.
С другой стороны, иногда возникает необходимость переопределять некоторые методы базового класса. Например, может потребовать изменить методы класса без изменения самого класса. Расширяя класс и используя модификатор override в объявлениях методов, можно разрешить новым методам переопределять базовый класс.
Успех применения модификаторов безопасности версий зависит от того, используются ли в объявлениях методов базового класса модификаторы наследования. Методы базового класса, помеченные модификатором final, нельзя переопределить, а методы базового класса с модификатором abstract можно скрыть только в том случае, если предоставлена явная реализация метода базового класса.
Невозможно одновременно использовать два модификатора безопасности версий или объединять модификатор безопасности версий с модификатором static. При выполнении в режиме безопасности версий можно использовать только один модификатор безопасности версий для каждого метода, переопределяющего метод базового класса.
Модификатор безопасности версий |
Область применения |
Значение |
---|---|---|
Метод или свойство |
Член не переопределяет член с тем же именем в базовом классе. |
|
Метод или свойство |
По умолчанию члены переопределяют члены с тем же именем в базовом классе. |
Модификатор expando
Модификатор expando указывает основанному на классе объекту вести себя так, как если бы он был объектом JScript. В объект expando можно динамически добавлять методы и свойства. Дополнительные сведения см. в разделе Объекты, основанные на прототипах.
Модификатор expando можно использовать независимо от других модификаторов.
Модификатор |
Область применения |
Значение |
---|---|---|
Класс или метод |
Если этот модификатор применяется к классу, классу предоставляется индексированное свойство по умолчанию, предназначенное для хранения и извлечения динамических свойств (свойств expando). В случае применения к методу это модификатор указывает, что метод является конструктором объекта expando. |
Модификатор static
Модификатор static означает, что член класса принадлежит самому классу, а не экземплярам класса. Следовательно, данные и методы, относящиеся к классу, нельзя связать с каким-либо отдельным экземпляром.
Модификатор static нельзя использовать одновременно с одним из модификаторов наследования или безопасности версий.
Модификатор |
Область применения |
Значение |
---|---|---|
Метод, свойство, поле или класс |
В случае применения к методам указывает, что метод можно вызвать, не создавая экземпляр класса. В случае применения к свойствам и полям означает, что одна копия является общей для всех экземпляров. Не следует смешивать модификатор static с оператором static, который используется для обозначения кода, инициализирующего класс. |