Membri del tipo

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
Evento 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.
Tipo nidificato 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.

Proprietà 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 abstract e i tipi che implementano le interfacce con i metodi abstract devono fornire un'implementazione per il metodo. L'unica eccezione si verifica nel caso in cui il tipo derivato sia esso stesso un tipo abstract. Tutti i metodi abstract sono virtuali.
private,
gruppo,
assembly,
gruppo e assembly,
gruppo o assembly,
o public
Tutti Consente di definire l'accessibilità del membro.
private
Accessibile solo dall'interno dello stesso tipo del membro o di un tipo nidificato.
gruppo
Accessibile dall'interno dello stesso tipo del membro e dai tipi derivati che ereditano da esso.
assembly
Accessibile solo nell'assembly nel quale il tipo viene definito.
gruppo e assembly
Accessibile solo dai tipi che sono qualificati sia per l'accesso di gruppo che di assembly.
gruppo o assembly
Accessibile solo dai tipi che sono qualificati per l'accesso di gruppo o per quello di assembly.
public
Accessibile da qualsiasi tipo.
final Metodi, proprietà ed eventi Il metodo virtual 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), è un membro di istanza (nessuna 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 Tutti Definisce le modalità di interazione del membro con membri ereditati con la stessa firma:
newslot
Nasconde i membri ereditati con la stessa firma.
override
Sostituisce la definizione di un metodo virtual ereditato.

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 virtual 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. Gli elenchi di parametri possono essere qualificati dal vincolo varargs, che indica che il metodo supporta un elenco di argomenti di variabili. 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.

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 virtual 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 virtual solo se questo non è contrassegnato come final e se il metodo con cui viene eseguita l'operazione è accessibile almeno come il metodo virtual.

Vedere anche

Common Type System | Definizioni dei tipi | Indicazioni per l'utilizzo dei membri di classe | Indicazioni per l'utilizzo dei tipi