Condividi tramite


Classi e struct (Estensioni del componente C++)

Dichiara una classe o una struct dove il tempo di vita dell'oggetto viene amministrato automaticamente. Quando l'oggetto non è più accessibile o esce dall'ambito, Visual C++ rimuove automaticamente la memoria che è stata allocata per l'oggetto.

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)
    L'accessibilità della classe o della struct al di fuori dell'assembly. I valori possibili sono public e private (private è l'impostazione predefinita). Classi o strutture annidate non possono avere uno specificatore di class_access.

  • name
    Nome della classe o della struct.

  • modifier (facoltativo)
    abstract e sealed sono modificatori validi.

  • inherit_access (facoltativo)
    L'accessibilità a base_type. L'unica accessibilità valida è public (public è l'impostazione predefinita).

  • base_type (facoltativo)
    Un tipo base. Tuttavia, un tipo di valore non può essere utilizzato come tipo di base.

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

Osservazioni

L'accessibilità predefinita del membro di un oggetto dichiarato con ref class o con value class è private. E l'accessibilità predefinita del membro di un oggetto dichiarato con ref struct o value struct è public.

Quando un tipo di riferimento eredita da un altro tipo di riferimento, le funzioni virtuali della classe base devono subire in modo esplicito l'override (con override (Estensioni del componente C++)) o devono essere nascoste (con nuovo (nuovo slot in vtable) (Estensioni del componente C++)). Le funzioni della classe derivata devono inoltre essere contrassegnate in modo esplicito come virtual.

Per rilevare in fase di compilazione se un tipo è ref class o ref struct, oppure è value class o value struct, utilizzare __is_ref_class (type), __is_value_class (type), o __is_simple_value_class (type). Per ulteriori informazioni, vedere Supporto del compilatore per tratti di tipo (Estensioni del componente C++).

Per ulteriori informazioni sulle classi e sulle struct, vedere

Windows Runtime

Osservazioni

Vedere Classi e strutture di ref e Classi e strutture di valore.

Parametri

  • base_type (facoltativo)
    Un tipo base. Una ref class o una ref struct può ereditare da zero o più interfacce e da zero o un tipo ref. Una value class o una value struct può ereditare solo da zero o più interfacce.

    Quando si dichiara un oggetto utilizzando le parole chiave ref struct o ref class, l'accesso all'oggetto viene eseguito mediante un handle all'oggetto, ovvero un puntatore di riferimento con contatore all'oggetto. Quando la variabile dichiarata va al di fuori dell'ambito, il compilatore rimuove automaticamente l'oggetto sottostante. Quando l'oggetto viene utilizzato come parametro in una chiamata o viene memorizzato in una variabile, viene effettivamente passato o memorizzato un handle all'oggetto.

    Quando si dichiara un oggetto utilizzando le parole chiave value struct o value class, il tempo di vita dell'oggetto dichiarato non viene controllato. L'oggetto si comporta come una qualsiasi altra classe o struct di C++ standard.

Requisiti

Opzione del compilatore: /ZW

Common Language Runtime

Osservazioni

La seguente tabella elenca le differenze della sintassi illustrata nella sezione Tutti i runtime specifica di C++/CLI.

Parametri

  • base_type (facoltativo)
    Un tipo base. Una ref class o una ref struct può ereditare da zero o più interfacce gestite e da zero o un tipo di riferimento. Una value class o una value struct può ereditare solo da zero o più interfacce gestite.

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

    Le parole chiave value struct e value class indicano al compilatore che il valore della classe o della struct allocata viene passato alle funzioni o viene memorizzato nei membri.

Requisiti

Opzione del compilatore: /clr

Vedere anche

Concetti

Estensioni componenti per le piattaforme runtime