Контрольный список обновлений синтаксиса управляемых расширений для 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.

  • Замените метод __typeof методом typeid.

  • Замените метод __try_cast методом safe_cast. Для Visual C++ 2005 этот шаблон определяется в cli Namespace.

  • При подписании пользовательской сборки (процедура известная как назначение строгого имени) с помощью атрибутов подписания сборки в среде CLR, следует удалить эти атрибуты из кода, а вместо них использовать параметры компоновщика, подписывающего сборки. Дополнительные сведения см. в разделе Сборки со строгими именами (подписывание сборок).

См. также

Основные понятия

Смешанные (собственные и управляемые) сборки

Language Features for Targeting the CLR