JScript 修饰符
JScript 修饰符可更改类、接口或者类或接口的成员的行为和可见性。 修饰符可以在定义类和接口时使用,但它们通常并不是必需的。
可见性修饰符
可见性修饰符对外部代码如何访问类、接口以及它们的成员加以限制。 可以使用一些限制条件,通过避免调用专用的内部方法和字段,来促进建立良好的面向对象的编程习惯。
默认情况下,可访问某个类的任何代码都可以访问该类的任何成员。 使用可见性修饰符可以有选择地阻止外部代码访问特定的类成员,只允许同一个包的类访问成员,或只允许派生类访问类成员。
可见性修饰符不能应用于全局函数或变量。 只有 protected 和 internal 可见性修饰符可以在一起使用。
可见性修饰符 |
有效范围 |
含义 |
---|---|---|
类、类成员、接口、接口成员或枚举 |
成员对于任何可访问类而对可见性没有限制的代码都是可见的。 默认情况下,在 JScript 中,类、接口以及它们的成员都是公共的。 |
|
类成员 |
成员仅在声明它的类内可见。 对派生类不可见。 当前类之外的代码无法访问私有成员。 |
|
类成员 |
成员仅在声明它的类内可见,并对该类的任何派生类可见。 受保护的修饰符不能对包范围的类使用,但可以对嵌套的类使用。 |
|
类、类成员、枚举 |
类、类成员或枚举在声明它们的包内任何地方都可见。 在此包外不可见。 |
继承修饰符
继承修饰符控制派生类的方法和属性如何重写基类中的方法和属性。 通过使用此控制,可以对派生类的方法是否将重写您所创建的类进行管理。
默认情况下,派生类的方法将重写基类方法,除非在派生类中使用了版本安全的 hide 特性。 该特性可阻止重写。 使用继承修饰符使您能控制某些特定的方法总是可以重写还是永远不能重写。
在某些条件下,可能需要确保不重写某种基类方法。 例如,如果在包内定义了一个类,就可以使用 final 修饰符确保派生类将不能更改此类的方法和属性。
另一方面,您也可能希望让您的类重写某些方法。 例如,可以创建一个类来提供一些基本功能,但对某些方法则使用 abstract 修饰符。 实现这些抽象方法是派生类编写器的任务。
版本安全修饰符也管理重写,但它是从派生类一边(而不是从基类一边)来管理的。 只有当版本安全修饰符所要重写的基类方法没有继承修饰符时,版本安全修饰符才有效果。
不能将两种继承修饰符组合在一起,也不能将继承修饰符与 static 修饰符组合在一起。
继承修饰符 |
有效范围 |
含义 |
---|---|---|
类、方法或属性 |
用于方法或属性,此修饰符指示成员没有实现。 用于类,此修饰符指示有一个或多个未实现的方法。 不能使用 new 关键字实例化抽象类或包含抽象成员的类,但它可以用作基类。 |
|
类、方法或属性 |
用于不能被扩展的类或不能被重写的方法。 使用 final 可防止派生类通过重写重要的函数而更改此类的行为。 具有 final 修饰符的方法可以被隐藏或重载,但不能被重写。 |
版本安全修饰符
版本安全修饰符控制可重写基类中的方法的派生类方法。 通过使用这种控制,您就可以管理您所创建的类是否将重写基类中的方法。
默认情况下,派生类的方法将重写基类中的方法,虽然派生类的定义中的继承修饰符也可以阻止重写。 使用版本安全修饰符使您能控制某些特定的方法是否会被重写。
在某些条件下,可能需要确保不重写基类方法。 例如,可以扩展一个类以更改基类方法的行为。 如果不希望这些方法在基类中被重写,就可以使用 hide 修饰符对这些方法作出声明。
另一方面,您也可能想重写某些基类方法。 例如,您可能想更改类的某些方法而不修改该类。 通过扩展该类并使用 override 修饰符作为方法声明,可以使新方法重写基类。
版本安全修饰符的成功使用取决于基类方法的声明是否使用了继承修饰符。 不能重写用 final 修饰符标记的基类方法;也不能隐藏用 abstract 修饰符标记的基类方法,除非为抽象的基类方法提供了显式实现。
不能将两种版本安全修饰符组合在一起,也不能将版本安全修饰符与 static 修饰符组合在一起。 当您以版本安全模式运行时,对每个重写基类方法的方法,仅可使用一个版本安全修饰符。
版本安全修饰符 |
有效范围 |
含义 |
---|---|---|
方法或属性 |
成员不重写基类中有相同名称的成员。 |
|
方法或属性 |
默认情况下,成员可重写基类中有相同名称的成员。 |
expando 修饰符
expando 修饰符能使得基于类的对象的行为就像 JScript 对象一样。 可以将方法和属性动态添加到 expando 对象。 有关更多信息,请参见 基于原型的对象。
可以独立于其他修饰符使用 expando 修饰符。
修饰符 |
有效范围 |
含义 |
---|---|---|
类或方法 |
用于类,给类提供一个默认的和带索引的属性,该属性能够存储和检索动态属性 (expando)。 用于方法,指示它是一个 expando 对象的构造函数。 |
static 修饰符
static 修饰符指明类的成员属于类本身而不属于类的实例。 因此,类特定的数据和方法可能不与任何特定的实例相关联。
不能将 static 修饰符与任何版本安全修饰符或继承修饰符组合。
修饰符 |
有效范围 |
含义 |
---|---|---|
方法、属性、字段或类 |
用于方法,指示可以在没有类实例的情况下调用它。 用于属性和字段,指定所有实例共享一个副本。 不应将 static 修饰符与 static 语句相混淆,后者表示初始化类的代码。 |