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
(選擇性) 組件外部的類別或結構的存取範圍。 可能的值為 publicprivateprivate 是預設值)。 巢狀類別或結構不可以有class_access 指定名稱。

name
類別或結構的名稱。

modifier
(選擇性) abstractsealed 為有效的修飾詞。

inherit_access
(選擇性) base_interface 的存取範圍。 唯一允許的存取範圍是 publicpublic 是預設值)。

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 執行階段

備註

請參閱 Ref 類別與結構實值類別與結構

參數

base_type
(選擇性) 基底類型。 ref 類別ref 結構可以繼承自零或多個介面,以及零或一種 ref 類型。 實值類別實值結構只可以繼承自零或多個介面。

當您使用 ref 類別ref 結構關鍵字宣告物件時,控制代碼可針對物件存取物件;也就是物件的參考計數器指標。 當宣告的變數超出範圍時,編譯器會自動刪除基礎物件。 當物件做為呼叫中的參數使用,或是儲存在變數中時,實際上是傳遞或儲存該物件的控制代碼。

當您使用實值類別實值結構關鍵字宣告物件時,不會監督所宣告物件的物件存留期。 此物件類似任何其他標準 C++ 類別或結構。

需求

編譯器選項:/ZW

Common Language Runtime

備註

下表列出 C++/CLI 特有的所有執行階段區段中所顯示語法的差異。

參數

base_type
(選擇性) 基底類型。 ref 類別ref 結構可以繼承自零或多個受控介面,以及零或一種 ref 類型。 實值類別實值結構只可以繼承自零或多個受控介面。

ref 類別ref 結構關鍵字會告訴編譯器:類別或結構是在堆積上配置。 當物件做為呼叫中的參數使用,或是儲存在變數中時,實際上是傳遞或儲存該物件的參考。

實值類別實值結構關鍵字會告訴編譯器,所配置類別或結構的值已傳遞給函式或儲存在成員中。

需求

編譯器選項:/clr

另請參閱

適用於.NET 和 UWP 的元件延伸模組