Condividi tramite


Elenco di controllo degli aggiornamenti della sintassi delle estensioni gestite per C++

Aggiornamento: novembre 2007

In Visual C++ sono state introdotte nuove funzionalità per Visual C++ 2005 destinate alle macchine virtuali con Garbage Collection, ad esempio .NET Framework. In Visual C++ 2008, il supporto per le estensioni gestite di C++ è obsoleto e potrebbe essere rimosso completamente in una versione successiva.

Il codice che utilizza le estensioni gestite per C++ può comunque essere ancora compilato con /clr:oldSyntax. Per ulteriori informazioni, vedere /clr (Compilazione Common Language Runtime). Per ulteriori informazioni sull'utilizzo della nuova sintassi, vedere:

In questo argomento vengono elencate le differenze sintattiche tra le estensioni gestite per C++ e la nuova sintassi Visual C++.

Per aggiornare il codice basato sulle estensioni gestite per C++

  • Rimuovere #using <mscorlib.dll>. Ora viene fatto riferimento automaticamente a questo assembly.

  • Sostituire __gc class con ref class.

  • Sostituire __gc struct con ref struct.

  • Sostituire __value class con value class.

  • Sostituire __value struct con value struct.

  • Rimuovere i costruttori predefiniti dalle classi di valori. I costruttori predefiniti per i tipi di valore sono consentiti nelle estensioni gestite per C++, ma la natura del CLR impedisce che tali costruttori vengano chiamati correttamente. Di conseguenza, questa funzionalità è stata rimossa.

Per ulteriori informazioni sui tipi di riferimento e di valore, vedere Classes and Structs (Managed).

  • Sostituire __gc __interface con interface class.

Per ulteriori informazioni sulla parola chiave interface, vedere interface class.

  • Sostituire __abstract con abstract e spostarlo dopo il nome della classe. Per ulteriori informazioni, vedere abstract (Visual C++).

  • Sostituire __sealed con sealed e spostarlo dopo il nome della classe. Per ulteriori informazioni, vedere sealed.

  • Sostituire __property con property, combinare i metodi get e set in un unico blocco di proprietà, quindi rimuovere il suffisso finale _/nome da queste funzioni di accesso. Per le proprietà semplici, non è necessario che le funzioni di accesso vengano definite esplicitamente. La sintassi delle proprietà indicizzate richiede coppie di parentesi quadre dopo il tipo della proprietà. Per ulteriori informazioni, vedere How to: Use Simple Properties e How to: Use Indexed Properties.

  • Sostituire __event con event (Visual C++).

  • Sostituire __value enum con enum class.

  • Sostituire i puntatori ai tipi di riferimento successivi (definiti con __gc*) con ^. Per ulteriori informazioni, vedere ^ (Handle to Object on Managed Heap).

  • Sostituire i puntatori ai tipi di valore potenzialmente presenti nell'heap del Garbage Collector con interior_ptr.

  • Sostituire i puntatori dichiarati con __pin con istanze di pin_ptr, a meno che non venga bloccato un intero oggetto, nel qual caso utilizzare interior_ptr e quindi pin_ptr sul puntatore interno. In Visual C++ 2005, questo modello è definito nello cli Namespace.

  • Sostituire new con gcnew.

  • Sostituire 0 o null con nullptr quando questi valori vengono utilizzati per indicare che un puntatore o un handle nell'heap del Garbage Collector non corrisponde a un oggetto e quando si utilizzano confronti per verificare puntatori e handle.

  • Aggiornare le matrici recuperate dalla Garbage Collection dichiarate con __gc[] in modo da utilizzare il tipo array (Visual C++). In Visual C++ 2005, questo modello è definito nello cli Namespace.

  • Rimuovere tutte le istanze di __box. Per ulteriori informazioni, vedere Implicit Boxing.

  • Rimuovere il prefisso "S" dalle stringhe letterali. Il compilatore ora determina se una stringa è letterale in base al contesto in cui viene utilizzata.

  • Sostituire la dichiarazione esplicita e l'utilizzo degli operatori di overload richiesti nelle estensioni gestite per C++, ad esempio op_Addition, op_Subtraction, con la tradizionale sintassi C++. Per ulteriori informazioni, vedere User-Defined Operators e Operator Overloading.

  • Aggiornare gli operatori di conversione, che utilizzano op_Implicit e op_Explicit nella sintassi delle estensioni gestite per C++. Per ulteriori informazioni, vedere User-Defined Conversions.

  • Sostituire __typeof con typeid.

  • Sostituire __try_cast con safe_cast. In Visual C++ 2005, questo modello è definito nello cli Namespace.

  • Se la firma dell'assembly, ovvero l'assegnazione all'assembly di un nome sicuro, è stata effettuata con gli attributi per la firma degli assembly di CLR, sarà necessario rimuovere tali attributi dal codice e utilizzare invece le opzioni del linker specifiche per questa operazione. Per ulteriori informazioni, vedere Assembly con nome sicuro (firma degli assembly).

Vedere anche

Concetti

Assembly misti (nativi e gestiti)

Language Features for Targeting the CLR