ref 類別和 ref 結構 (C++/CLI 和 C++/CX)
ref 類別或 ref 結構 延伸模組會宣告「物件存留期」會自動管理的類別或結構。 當物件無法再存取或超出範圍時,就會釋放記憶體。
所有執行階段
語法
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
類別或結構的名稱。
modifier
(選擇性) abstract 和 sealed 為有效的修飾詞。
inherit_access
(選擇性) base_interface 的存取範圍。 唯一允許的存取範圍是 public
(public
是預設值)。
base_type
(選擇性) 基底類型。 不過,值類型無法做為基底類型。
如需詳細資訊,請參閱 Windows 執行階段和 Common Language Runtime 區段中,此參數的語言特定描述。
備註
以 ref 類別或實值類別宣告之物件的預設成員存取範圍為 private
。 以 ref 結構或值結構宣告之物件的預設成員存取範圍為 public
。
當參考類型繼承自另一個參考類型時,必須以 override 明確覆寫,或以 new (vtable 中的新位置) 隱藏基底類別中的虛擬函式。 衍生類別函式也必須明確標示為 virtual
。
若要在編譯時間偵測某個類型為 ref 類別或 ref 結構,或是實值類別或實值結構,請使用 __is_ref_class (type)
、__is_value_class (type)
或 __is_simple_value_class (type)
。 如需詳細資訊,請參閱類型特徵的編譯器支援。
如需類別和結構的詳細資訊,請參閱
Windows 執行階段
備註
參數
base_type
(選擇性) 基底類型。 ref 類別或 ref 結構可以繼承自零或多個介面,以及零或一種 ref 類型。 實值類別或實值結構只可以繼承自零或多個介面。
當您使用 ref 類別或 ref 結構關鍵字宣告物件時,控制代碼可針對物件存取物件;也就是物件的參考計數器指標。 當宣告的變數超出範圍時,編譯器會自動刪除基礎物件。 當物件做為呼叫中的參數使用,或是儲存在變數中時,實際上是傳遞或儲存該物件的控制代碼。
當您使用實值類別或實值結構關鍵字宣告物件時,不會監督所宣告物件的物件存留期。 此物件類似任何其他標準 C++ 類別或結構。
需求
編譯器選項:/ZW
通用語言執行平台
備註
下表列出 C++/CLI 特有的所有執行階段區段中所顯示語法的差異。
參數
base_type
(選擇性) 基底類型。 ref 類別或 ref 結構可以繼承自零或多個受控介面,以及零或一種 ref 類型。 實值類別或實值結構只可以繼承自零或多個受控介面。
ref 類別和 ref 結構關鍵字會告訴編譯器:類別或結構是在堆積上配置。 當物件做為呼叫中的參數使用,或是儲存在變數中時,實際上是傳遞或儲存該物件的參考。
實值類別和實值結構關鍵字會告訴編譯器,所配置類別或結構的值已傳遞給函式或儲存在成員中。
需求
編譯器選項:/clr