Modificatori JScript
I modificatori JScript vengono utilizzati per modificare il comportamento e la visibilità di classi, di interfacce o di membri di classe o di interfaccia. È possibile utilizzare i modificatori al momento della definizione di classi e di interfacce, benché non siano obbligatori.
Modificatori di visibilità
Mediante i modificatori di visibilità è possibile imporre restrizioni sulle modalità di accesso alle classi, alle interfacce e ai relativi membri da parte di codice esterno. È possibile utilizzare restrizioni per incoraggiare l'impiego di procedure corrette nella programmazione orientata a oggetti impedendo le chiamate a metodi e campi interni specifici.
Per impostazione predefinita, ogni codice con accesso a una data classe ha accesso a qualsiasi membro di quella classe. Mediante i modificatori di visibilità è possibile operare in maniera selettiva per impedire al codice esterno di accedere a membri specifici della classe, consentendo solo alle classi dello stesso package o solo alle classi derivate l'accesso ai membri.
I modificatori di visibilità non possono essere applicati alle funzioni o alle variabili globali. I soli modificatori di visibilità utilizzabili congiuntamente sono protected e internal.
Modificatore di visibilità |
Valido per |
Significato |
---|---|---|
classe, membro di classe, interfaccia, membro di interfaccia, enumerazioni |
Il membro è visibile a qualsiasi codice che abbia accesso alla classe senza restrizioni della visibilità. Per impostazione predefinita, in JScript le classi, le interfacce e i relativi membri sono pubblici. |
|
membro di classe |
Il membro è visibile solo all’interno della classe nella quale viene dichiarato. Non è visibile alle classi derivate. Il codice esterno alla classe corrente non può accedere ai membri privati. |
|
membro di classe |
Il membro è visibile solo all’interno della classe nella quale viene dichiarato e a tutte le classi derivate. Il modificatore protected non può essere utilizzato per le classi in ambito di package. Invece può essere utilizzato per le classi annidate. |
|
classe, membro di classe, enumerazione |
La classe, il relativo membro o l'enumerazione è visibile in qualunque punto del package in cui è dichiarata. Non è visibile all'esterno del package. |
Modificatori di ereditarietà
Mediante i modificatori di ereditarietà è possibile controllare le modalità con cui metodi e proprietà di classi derivate sottopongono a override metodi e proprietà di una classe base. Utilizzando questo strumento di controllo è possibile decidere se la classe che si è creata debba essere sottoposta o meno a override dai metodi delle classi derivate.
Per impostazione predefinita, i metodi di una classe derivata effettuano l'override dei metodi della classe base, a meno che nella classe derivata non venga utilizzato l'attributo indipendente dalla versione hide. Questo attributo impedisce l'override. Mediante i modificatori di ereditarietà è possibile controllare se determinati metodi debbano essere sempre sottoposti a override o, al contrario, non lo debbano essere mai.
In alcuni casi, può essere necessario assicurare che un metodo di una classe base non venga sottoposto a override. Ad esempio, se si definisce una classe in un package, è possibile utilizzare il modificatore final per evitare che le classi derivate ne modifichino i metodi e le proprietà.
Talvolta può essere invece necessario che alcuni metodi di una classe vengano sottoposti a override. Ad esempio, si può creare una classe che fornisce alcune funzionalità di base ma utilizzare il modificatore abstract per alcuni metodi. Le implementazioni dei metodi astratti spettano all'autore della classe derivata.
Anche mediante i modificatori indipendenti dalla versione è possibile gestire l'override, ma dal lato della classe derivata, non da quello della classe base. I modificatori indipendenti dalla versione hanno effetto solo se il metodo della classe base che sottopongono a override non possiede modificatori di ereditarietà.
Non è possibile combinare due modificatori di ereditarietà o un modificatore di ereditarietà con il modificatore static.
Modificatore di ereditarietà |
Valido per |
Significato |
---|---|---|
classe, metodo o proprietà |
Per i metodi o le proprietà questo modificatore indica che il membro non è dotato di implementazione. Per le classi, indica che vi sono uno o più metodi non implementati. Non è possibile creare un'istanza per una classe astratta o per una classe che contiene un membro astratto utilizzando la parola chiave new. Tuttavia, tale classe può essere utilizzata come classe base. |
|
classe, metodo o proprietà |
Per le classi indica che non possono essere estese, per i metodi indica che non possono essere sottoposti a override. L'utilizzo del modificatore final impedisce che le classi derivate modifichino il comportamento della classe sottoponendo a override funzioni importanti. I metodi che impiegano il modificatore final possono essere nascosti o sottoposti a overload, ma non possono essere sottoposti a override. |
Modificatori indipendenti dalla versione
Mediante i modificatori indipendenti dalla versione è possibile controllare quali metodi di una classe derivata sottopongono a override i metodi di una classe base. Utilizzando questo strumento di controllo è possibile decidere se la classe che si è creata debba sottoporre o meno a override i metodi di una classe base.
Per impostazione predefinita, i metodi di una classe derivata sottopongono a override i metodi di una classe base, per quanto l'override possa essere impedito dai modificatori di ereditarietà inclusi nella definizione della classe derivata. Mediante i modificatori indipendenti dalla versione è possibile controllare se determinati metodi debbano essere sottoposti o meno a override.
In alcuni casi, può essere necessario impedire l'override dei metodi di una classe base. È possibile, ad esempio, estendere una classe così da modificare il comportamento dei metodi di una classe base. Se si intende impedire che questi metodi siano sottoposti a override nella classe base, si può utilizzare il modificatore hide per le dichiarazioni di metodo.
Talvolta può essere invece necessario effettuare l'override di alcuni metodi di una classe base. Potrebbe essere necessario, ad esempio, modificare i metodi di una classe senza modificare la classe stessa. Estendendo la classe e utilizzando il modificatore override per le dichiarazioni di metodo, è possibile ottenere l'override della classe base da parte dei nuovi metodi.
L'efficacia dell'utilizzo dei modificatori indipendenti dalla versione dipende dall'impiego o meno di modificatori di ereditarietà nei metodi della classe base. I metodi della classe base contrassegnati con il modificatore final non possono essere sottoposti a override. Se contrassegnati con il modificatore abstract, tali metodi non possono essere nascosti se non a seguito di un'implementazione esplicita per il metodo astratto della classe base.
Non è possibile combinare due modificatori indipendenti dalla versione o un modificatore indipendente dalla versione con il modificatore static. Se è attiva la modalità indipendente dalla versione, può essere utilizzato un solo modificatore indipendente dalla versione per ogni metodo che sottopone a override un metodo della classe base.
Modificatore indipendente dalla versione |
Valido per |
Significato |
---|---|---|
metodo o proprietà |
Il membro non sottopone a override un membro della classe base con lo stesso nome. |
|
metodo o proprietà |
Per impostazione predefinita, i membri sottopongono a override i membri della classe base con lo stesso nome. |
Modificatore expando
Mediante il modificatore expando un oggetto basato su una classe assume il comportamento di un oggetto JScript. All'oggetto expando possono essere aggiunti dinamicamente metodi e proprietà. Per ulteriori informazioni vedere Oggetti basati su prototipi.
Il modificatore expando può essere utilizzato indipendentemente dagli altri modificatori.
Modificatore |
Valido per |
Significato |
---|---|---|
classe o metodo |
Per una classe, indica che riceve una proprietà indicizzata predefinita in grado di archiviare e recuperare proprietà dinamiche (expando). Per un metodo, indica che si tratta di un costruttore per un oggetto expando. |
Modificatore static
Il modificatore static indica che un membro di una classe appartiene a questa e non a istanze della classe. Pertanto, è possibile disporre di dati e metodi specifici di classi non associati ad alcuna particolare istanza.
Non è possibile combinare il modificatore static con modificatori indipendenti dalla versione o con modificatori di ereditarietà.
Modificatore |
Valido per |
Significato |
---|---|---|
metodo, proprietà, campo o classe |
Per i metodi, indica che possono essere chiamati senza un'istanza della classe. Per le proprietà e i campi, indica che una copia è condivisa da tutte le istanze. Il modificatore static non deve essere confuso con l'istruzione static, che indica codice che inizializza la classe. |