Контрольный список обновлений синтаксиса управляемых расширений для C++
Обновлен: Ноябрь 2007
Для Visual C++ 2005 в Visual C++ включены возможности для конечных виртуальных машин со сборкой мусора, таких как платформа .NET Framework. Для Visual C++ 2008 поддержка управляемых расширений для C++ устарела и, возможно, будет полностью удалена в будущем выпуске.
Управляемые расширения для C++ могут по-прежнему компилироваться с помощью /clr:oldSyntax. Дополнительные сведения об использовании нового синтаксиса см. в разделе /clr (компиляция CLR)
Этот раздел описывает синтаксические различия между управляемыми расширениями для C++ и новым синтаксисом Visual C++.
Обновление кода управляемых расширений для C++
Удалите #using <mscorlib.dll>. (Ссылка на эту сборку задана сейчас по умолчанию).
Замените метод __gc class методом ref class.
Замените метод __gc struct методом ref struct.
Замените метод __value class методом value class.
Замените метод __value struct методом value struct.
Удалите конструкторы по умолчанию из классов значений. (Конструкторы по умолчанию допускаются для типов значений управляемых расширений для C++, но принципы среды CLR не допускают их надежного вызова, вследствие чего эта возможность была удалена).
Дополнительные сведения о ссылочных типах и типах значений см. в разделе Classes and Structs (Managed).
- Замените метод __gc __interface методом interface class.
Дополнительные сведения о ключевом слове interface см. в разделе interface class.
Замените __abstract на abstract и поставьте его после имени класса. Дополнительные сведения см. в разделе abstract (Visual C++).
Замените __sealed на sealed и поставьте его после имени класса. Дополнительные сведения см. в разделе sealed.
Замените метод __property на метод property, объедините методы "Get" и "Set" в едином блоке свойств, и удалите из этих методов доступа конечные знаки: черта внизу или суффикс имени. Методу доступа не нужно явно определять простые свойства. По правилам синтаксиса для индексированных свойств требуются квадратные скобки после типа свойства. Дополнительные сведения см. в разделах How to: Use Simple Properties и How to: Use Indexed Properties.
Замените метод __event методом event (Visual C++).
Замените метод __value enum методом enum class.
Замените указатели на ссылочные типы, после которых следует (определенные с помощью __gc*) ^. Дополнительные сведения см. в разделе ^ (Handle to Object on Managed Heap).
Замените указатели на типы значений, которые потенциально находятся в куче, где производится сборка мусора, инструкциями interior_ptr.
Замените указатели, объявленные с ключевым словом __pin, экземплярами pin_ptr, кроме тех случаев, когда объект закрепляется целиком, в этом случае используйте interior_ptr, а затем pin_ptr в отношении внутреннего указателя. Для Visual C++ 2005 этот шаблон определяется в cli Namespace.
Замените метод new методом gcnew.
Замените значение 0 или NULL на nullptr, в тех случаях, когда эти значения используются, чтобы показать, что указатель или дескриптор, находясь в куче собранного мусора, не указывает на объект, а также при использовании сравнений для проверки указателей и дескрипторов.
Измените объявления массивов, для которых производится сборка мусора: массивы, декларированные с помощью __gc[], теперь должны использовать тип array (Visual C++). Для Visual C++ 2005 этот шаблон определяется в cli Namespace.
Удалите все экземпляры __box. Дополнительные сведения см. в разделе Implicit Boxing.
Удалите префикс "S" из строковых литералов (компилятор сейчас автоматически определяет, является ли строка литералом на основе контекста, в котором она используется).
Замените явные объявления и используемые перегруженные операторы, необходимые в управляемых расширениях для C++ (такие как op_Addition, op_Subtraction), на традиционный синтаксис C++. Дополнительные сведения см. в разделах User-Defined Operators и Operator Overloading.
Обновите операторы преобразования (которые используют op_Implicit и op_Explicit в синтаксисе управляемых расширений для C++). Дополнительные сведения см. в разделе User-Defined Conversions.
Замените метод __try_cast методом safe_cast. Для Visual C++ 2005 этот шаблон определяется в cli Namespace.
При подписании пользовательской сборки (процедура известная как назначение строгого имени) с помощью атрибутов подписания сборки в среде CLR, следует удалить эти атрибуты из кода, а вместо них использовать параметры компоновщика, подписывающего сборки. Дополнительные сведения см. в разделе Сборки со строгими именами (подписывание сборок).