ref class e ref struct (C++/CLI e C++/CX)

Le estensioni ref class e ref struct dichiarano una classe o uno struct la cui durata dell'oggetto viene amministrata automaticamente. Quando l'oggetto non è più accessibile o esce dall'ambito, la memoria viene liberata.

Tutti i runtime

Sintassi

class_access ref class name modifier : inherit_access base_type {};
class_access ref struct name modifier : inherit_access base_type {};
class_access value class name modifier : inherit_access base_type {};
class_access value struct name modifier : inherit_access base_type {};

Parametri

class_access
(Facoltativo) Accessibilità della classe o dello struct all'esterno dell'assembly. I valori possibili sono public e private (private è l'impostazione predefinita). Le classi o gli struct annidati non possono avere un identificatore class_access.

name
Nome della classe o dello struct.

modifier
(Facoltativo) abstract e sealed sono modificatori validi.

inherit_access
(Facoltativo) Accessibilità di base_type. L'unica accessibilità consentita è public (public è l'impostazione predefinita).

base_type
(Facoltativo) Tipo di base. Tuttavia, un tipo valore non può fungere da tipo di base.

Per altre informazioni, vedere le descrizioni specifiche del linguaggio di questo parametro nelle sezioni Windows Runtime e Common Language Runtime.

Osservazioni:

L'accessibilità predefinita dei membri di un oggetto dichiarato con la classe ref o value è private. L'accessibilità predefinita dei membri di un oggetto dichiarato con lo struct o il valore di riferimento è public.

Quando un tipo riferimento eredita da un altro tipo riferimento, le funzioni virtuali nella classe base devono essere sottoposte a override esplicito (con override) o nascoste (con new (nuovo slot in vtable)). Anche le funzioni della classe derivata devono essere contrassegnate in modo esplicito come virtual.

Per rilevare in fase di compilazione se un tipo è una classe di riferimento o uno struct di riferimento oppure una classe di valore o uno struct di valore, usare __is_ref_class (type), __is_value_class (type) o __is_simple_value_class (type). Per altre informazioni, vedere Supporto del compilatore per caratteristiche di tipo.

Per altre informazioni sulle classi e gli struct, vedere

Windows Runtime

Osservazioni:

Vedere Classi e struct di riferimento e Classi e struct di valore.

Parametri

base_type
(Facoltativo) Tipo di base. Una classe di riferimento o uno struct di riferimento può ereditare da zero o più interfacce e da uno o zero tipi ref. Una classe di valore o uno struct di valore può ereditare solo da zero o più interfacce.

Quando si dichiara un oggetto usando la parola chiave ref class o ref struct, l'accesso all'oggetto avviene tramite un handle a un oggetto, ovvero un puntatore reference-counter all'oggetto. Quando la variabile dichiarata esce dall'ambito, il compilatore elimina automaticamente l'oggetto sottostante. Quando l'oggetto viene utilizzato come parametro in una chiamata o viene archiviato in una variabile, viene effettivamente passato o archiviato un handle per l'oggetto.

Quando si dichiara un oggetto usando la parola chiave value class o value struct, la durata dell'oggetto dichiarato non viene controllata. L'oggetto è come qualsiasi altra classe o struct C++ standard.

Requisiti

Opzione del compilatore: /ZW

Common Language Runtime

Osservazioni:

La tabella seguente elenca le differenze dalla sintassi mostrata nella sezione Tutti i runtime specifiche per C++/CLI.

Parametri

base_type
(Facoltativo) Tipo di base. Una classe di riferimento o uno struct di riferimento può ereditare da zero o più interfacce gestite e da uno o zero tipi ref. Una classe di valore o uno struct di valore può ereditare solo da zero o più interfacce gestite.

Le parole chiave ref class e ref struct indicano al compilatore che la classe o la struttura deve essere allocata nell'heap. Quando l'oggetto viene utilizzato come parametro in una chiamata o viene archiviato in una variabile, viene effettivamente passato o archiviato un riferimento all'oggetto.

Le parole chiave value class e value struct indicano al compilatore che il valore della classe o della struttura allocata viene passato a funzioni o archiviato in membri.

Requisiti

Opzione del compilatore: /clr

Vedi anche

Estensioni componenti per .NET e UWP