Condividi tramite


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

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 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.

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 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:

newslot

Nasconde i membri ereditati con la stessa firma.

override

Sostituisce la definizione di un metodo virtuale 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 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.

Vedere anche

Concetti

Definizioni dei tipi

Altre risorse

Sistema di tipi comuni

Linee guida di progettazione dei membri

Linee guida di progettazione dei tipi