類別和結構 (C++ 元件擴充功能)
宣告自動管理「物件存留期」(Object Lifetime) 的類別或結構。當物件不再是可存取或超出範圍時,Visual C++ 會自動捨棄配置給物件的記憶體。
所有執行階段
語法
class_access ref class name modifier : inherit_access base_type {};
class_access ref struct name modifier : inherit_access base_type {};
class_access value class name modifier : inherit_access base_type {};
class_access value struct name modifier : inherit_access base_type {};
參數
class_access (選擇性)
組件外部類別或結構的存取範圍。可能的值為 public 和 private (private 是預設值)。巢狀類別或結構不可以有 class_access 規範。name
類別或結構的名稱。inherit_access (選擇性)
base_type 的存取範圍。唯一允許的存取範圍是 public (public 是預設值)。base_type (選擇性)
基底型別。不過,實值型別不可以當做基底型別。如需詳細資訊,請參閱 Windows 執行階段 和 Common Language Runtime 兩節中有關這個參數的語言特定描述。
備註
使用 ref class 或 value class 所宣告的物件,其預設成員存取範圍會是 private。使用 ref struct 或 value struct 所宣告的物件,其預設成員存取範圍會是 public。
當參考型別自另一個參考型別繼承時,必須明確覆寫 (使用 override (C++ 元件擴充功能)) 或隱藏 (使用 new (vtable 中的新位置) (C++ 元件擴充功能)) 基底類別中的虛擬函式。衍生類別函式也必須明確標記為 virtual。
若要在編譯時期偵測型別是 ref class 還是 ref struct,或者是 value class 還是 value struct,請使用 __is_ref_class (type)、__is_value_class (type) 或 __is_simple_value_class (type)。如需詳細資訊,請參閱型別特性的編譯器支援 (C++ 元件擴充功能)。
如需類別和結構的詳細資訊,請參閱
Windows 執行階段
備註
參數
base_type (選擇性)
基底型別。ref class 或 ref struct 可以繼承自零個或多個介面以及零個或一個 ref 型別。value class 或 value struct 只能繼承自零個或多個介面。當您使用 ref class 或 ref struct 關鍵字宣告物件時,物件的存取是透過物件控制碼,也就是物件的參考計數指標。當宣告的變數超出範圍時,編譯器會自動刪除基礎物件。當物件是在呼叫中做為參數,或在變數中儲存時,實際上傳遞或儲存的是物件的控制代碼。
當您使用 value class 或 value struct 關鍵字宣告物件時,所宣告之物件的存留期不會受到監督。物件類似任何其他標準 C++ 類別或結構。
需求
編譯器選項:/ZW
Common Language Runtime
備註
下表列出與 [所有執行階段] 區段中所顯示專屬於 C++/CLI 之語法的差異。
參數
base_type (選擇性)
基底型別。ref class 或 ref struct 可以繼承自零個或多個 Managed 介面以及零個或一個 ref 型別。value class 或 value struct 只能繼承自零個或多個 Managed 介面。ref class 和 ref struct 關鍵字會指示編譯器將類別或結構配置在堆積上。當物件是在呼叫中做為參數,或在變數中儲存時,實際上傳遞或儲存的是物件的參考。
value class 和 value struct 關鍵字會告訴編譯器,所配置之類別或結構的值已傳遞給函式或儲存在成員中。
需求
編譯器選項:/clr