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++)。
以 property 取代 __property,將 get 和 set 方法結合成為單一的屬性區塊,並移除這些存取子 (Accessor) 結尾的底線/名稱字尾。不需要為簡單的屬性明確定義存取子。索引屬性的語法需要在屬性型別之後使用方括號組。如需詳細資訊,請參閱 How to: Use Simple Properties和 How 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 Operators和Operator Overloading。
更新轉換運算子 (在 Managed Extensions for C++ 語法中會使用 op_Implicit 和 op_Explicit)。如需詳細資訊,請參閱User-Defined Conversions。
以 safe_cast 取代 __try_cast。如果使用的是 Visual C++ 2005,這個樣板會定義在 cli Namespace 中。
如果您使用 CLR 的組件簽署屬性來簽署組件 (也稱做為組件提供強式名稱),則應該從程式碼中移除這些屬性,並改用組件簽署連結器選項。如需詳細資訊,請參閱強式名稱組件 (組件簽署)。