Membri dei tipi
Aggiornamento: novembre 2007
Il runtime consente di definire i membri del tipo utilizzato: eventi, campi, tipi nidificati, metodi e proprietà. Ciascun membro dispone di una firma. Nella tabella che segue sono descritti i membri del tipo utilizzati in .NET Framework.
Membro |
Descrizione |
---|---|
Consente di definire una situazione a cui è possibile fornire risposta e metodi di cui è possibile eseguire la sottoscrizione, l'annullamento della sottoscrizione e la generazione dell'evento. Gli eventi sono spesso utilizzati per indicare modifiche di stato a tipi diversi. |
|
Campo |
Consente di descrivere e contenere parte dello stato del tipo. I campi possono essere di qualsiasi tipo supportato dal runtime. |
Consente di definire un tipo all'interno dell'ambito del tipo di inclusione. |
|
Metodo |
Consente di descrivere le operazioni disponibili sul tipo. Nella firma di un metodo sono specificati i tipi consentiti per tutti gli argomenti del metodo e per il relativo valore restituito. Un costruttore è un tipo particolare di metodo che consente di creare nuove istanze di un tipo. |
Consente di denominare un valore o uno stato del tipo e di definire i metodi per ottenere o impostare il valore della proprietà. Le proprietà possono essere tipi primitivi, insiemi di tipi primitivi, tipi definiti dall'utente, oppure insiemi di tipi definiti dall'utente. Sono spesso utilizzate per mantenere l'interfaccia pubblica di un tipo indipendente dalla sua effettiva rappresentazione. |
Caratteristiche dei membri
Common Type System consente ai membri del tipo di disporre di caratteristiche diverse, ma i linguaggi non devono necessariamente supportarle tutte. Le caratteristiche dei membri sono descritte nella tabella che segue.
Caratteristica |
Si applica a |
Descrizione |
---|---|---|
abstract |
Metodi, proprietà ed eventi |
Il tipo non fornisce l'implementazione del metodo. I tipi che ereditano i metodi astratti e i tipi che implementano le interfacce con i metodi astratti devono fornire un'implementazione per il metodo. L'unica eccezione si verifica nel caso in cui il tipo derivato sia esso stesso un tipo astratto. Tutti i metodi astratti sono virtuali. |
private, gruppo, assembly, gruppo e assembly, gruppo o assembly o public |
Tutto |
Consente di definire l'accessibilità del membro.
|
final |
Metodi, proprietà ed eventi |
Il metodo virtuale non può essere sottoposto a override in un tipo derivato. |
initialize-only |
Campi |
Il valore può essere solo inizializzato e non può essere scritto dopo l'inizializzazione. |
istanza |
Campi, metodi, proprietà ed eventi |
Se un membro non è contrassegnato come static (C# e C++), Shared (Visual Basic), virtual (C# e C++), o Overridable (Visual Basic), si tratta di un membro di istanza (non esiste alcuna parola chiave di istanza). Ci saranno tante copie di tali membri in memoria quanti sono gli oggetti che li utilizzano. |
literal |
Campi |
Il valore assegnato al campo è un valore fisso, noto in fase di compilazione, di un tipo di valore incorporato. Ai campi literal viene a volte fatto riferimento come a costanti. |
newslot o override |
Tutto |
Definisce le modalità di interazione del membro con membri ereditati con la stessa firma:
Il valore predefinito è newslot. |
static |
Campi, metodi, proprietà ed eventi |
Il membro appartiene al tipo sul quale viene definito, non a un'istanza specifica del tipo. Il membro esiste anche se non viene creata un'istanza del tipo ed è condiviso tra tutte le istanze del tipo. |
virtual |
Metodi, proprietà ed eventi |
Il metodo può essere implementato da un tipo derivato e può essere richiamato in modo statico o dinamico. Se viene utilizzata la chiamata dinamica il tipo dell'istanza che effettua la chiamata in fase di esecuzione determina l'implementazione del metodo che viene chiamato anziché il tipo noto in fase di compilazione. Per richiamare un metodo virtuale in modo statico, la variabile potrebbe richiedere un cast su un tipo che utilizza la versione desiderata del metodo. |
Overload
Ciascun membro di tipo dispone di una firma univoca. La firma di un metodo è costituita dal nome del metodo e da un elenco di parametri, ovvero l'ordine e i tipi degli argomenti del metodo. All'interno di un tipo è possibile definire più metodi con lo stesso nome, purché la firma sia diversa. Quando vengono definiti due o più metodi con lo stesso nome si dice che il metodo è stato sottoposto a overload. In System.Char, ad esempio, IsDigit è stato sottoposto a overload. Tramite un metodo viene accettato un oggetto Char e viene restituito un valore Boolean. Tramite l'altro metodo vengono accettati un oggetto String e un oggetto Int32 e viene restituito un valore Boolean. Gli elenchi di parametri possono essere qualificati anche dal vincolo varargs, che indica che il metodo supporta un elenco di argomenti di variabili.
Eredità, override e membri nascosti
Un tipo derivato eredita tutti i membri del proprio tipo di base, ovvero, tali membri sono definiti e sono disponibili sul tipo derivato. Il comportamento o le qualità dei membri ereditati possono essere modificati in due modi:
È possibile nascondere un membro ereditato con un tipo derivato definendo un nuovo membro con la stessa firma. Questa operazione può essere eseguita per rendere privato un membro che in precedenza era pubblico oppure per definire un nuovo comportamento per un membro ereditato contrassegnato come final.
Con un tipo derivato è possibile eseguire l'override di un metodo virtuale ereditato. Nel metodo con cui viene eseguito l'override si fornisce una nuova definizione del metodo che sarà richiamato in base al tipo del valore in fase di esecuzione anziché in base al tipo della variabile nota in fase di compilazione. È possibile sottoporre a override un metodo virtuale solo se questo non è contrassegnato come final e se il metodo con cui viene eseguita l'operazione è accessibile almeno come il metodo virtuale.