共用方式為


Managed Extensions for C++ 語法升級檢查清單

更新:2007 年 11 月

對於 Visual C++ 2005,Visual C++ 包含以具記憶體回收之虛擬機器 (例如 .NET Framework) 為目標的功能。對於 Visual C++ 2008,Managed Extensions for C++ 的支援已被取代,而且可能會在未來的發行版本中完全移除。

使用 Managed Extensions for C++ 的程式碼還是可以使用 /clr:oldSyntax 進行編譯。如需詳細資訊,請參閱 /clr (Common Language Runtime 編譯)。如需使用新語法的詳細資訊,請參閱:

本主題列出 Managed Extensions for C++ 和新的 Visual C++ 語法之間的語法差異。

更新 Managed Extensions for C++ 程式碼

  • 移除 #using <mscorlib.dll> (現在預設會參考這個組件)。

  • 以 ref class 取代 __gc class。

  • 以 ref struct 取代 __gc struct。

  • 以 value class 取代 __value class。

  • 以 value struct 取代 __value struct。

  • 從實值類別移除預設建構函式 (Constructor) (實值型別的預設建構函式可在 Managed Extensions for C++ 中使用,但是 CLR 的本質會使這些函式無法可靠地呼叫,所以這個功能已經移除)。

如需參考和實值型別的詳細資訊,請參閱Classes and Structs (Managed)

  • 以 interface class 取代 __gc __interface。

如需 interface 關鍵字的詳細資訊,請參閱 interface class

  • 以 abstract 取代 __abstract,並將它移動到類別名稱之後。如需詳細資訊,請參閱 abstract (Visual C++)

  • 以 sealed 取代 __sealed,並將它移動到類別名稱之後。如需詳細資訊,請參閱 sealed

  • property 取代 __property,將 get 和 set 方法結合成為單一的屬性區塊,並移除這些存取子 (Accessor) 結尾的底線/名稱字尾。不需要為簡單的屬性明確定義存取子。索引屬性的語法需要在屬性型別之後使用方括號組。如需詳細資訊,請參閱 How to: Use Simple PropertiesHow to: Use Indexed Properties

  • event (Visual C++) 取代 __event

  • enum class 取代 __value enum。

  • 以 ^ 取代下列的參考型別指標 (以 __gc* 定義)。如需詳細資訊,請參閱 ^ (Handle to Object on Managed Heap)

  • interior_ptr 取代實值型別的指標,指標可能存在於記憶體回收的堆積 (Heap) 中。

  • pin_ptr 的執行個體 (Instance) 取代使用 __pin 宣告的指標,除非要 Pin 整個物件 (此種情況則使用 interior_ptr,然後在內部指標上使用 pin_ptr)。如果使用的是 Visual C++ 2005,這個樣板會定義在 cli Namespace 中。

  • gcnew 取代 new。

  • 當 0 或 null 用來表示記憶體回收堆積中的指標或控制代碼不再表示物件,以及使用比較來檢查指標和控制代碼時,以 nullptr 取代 0 或 null。

  • 更新以 __gc[] 宣告之記憶體回收的陣列以使用array (Visual C++) 型別。如果使用的是 Visual C++ 2005,這個樣板會定義在 cli Namespace 中。

  • 移除所有 __box 的執行個體。如需詳細資訊,請參閱Implicit Boxing

  • 從字串常值 (String Literal) 移除 "S" 前置詞 (編譯器現在會根據字串所使用的場合來判斷是否為常值)。

  • 以傳統 C++ 語法取代 Managed Extensions for C++ 所需的明確宣告和多載運算子 (Overloaded Operator) 的使用 (例如 op_Addition、op_Subtraction)。如需詳細資訊,請參閱User-Defined OperatorsOperator Overloading

  • 更新轉換運算子 (在 Managed Extensions for C++ 語法中會使用 op_Implicit 和 op_Explicit)。如需詳細資訊,請參閱User-Defined Conversions

  • typeid 取代 __typeof

  • safe_cast 取代 __try_cast。如果使用的是 Visual C++ 2005,這個樣板會定義在 cli Namespace 中。

  • 如果您使用 CLR 的組件簽署屬性來簽署組件 (也稱做為組件提供強式名稱),則應該從程式碼中移除這些屬性,並改用組件簽署連結器選項。如需詳細資訊,請參閱強式名稱組件 (組件簽署)

請參閱

概念

混合 (原生和 Managed) 組件

Language Features for Targeting the CLR