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