告訴偵錯工具使用 DebuggerTypeProxy 屬性顯示的類型 (C#、Visual Basic、C++/CLI)

DebuggerTypeProxyAttribute 會指定類型的 Proxy (或替代),並且變更在偵錯工具視窗中顯示類型的方式。 當您檢視有 Proxy 的變數時,Proxy 會替代 [顯示] 中的原始類型。 偵錯工具變數視窗只會顯示 proxy 型別的 Public 成員。 私用成員不會顯示。

這個屬性可以套用至:

  • 結構
  • 類別
  • 組件

注意

針對機器碼,此屬性僅支援 C++/CLI 程式碼。

類型 Proxy 類別必須具有建構函式,才能接受 Proxy 將取代之類型的引數。 每次需要顯示目標類型的變數時,偵錯工具都會建立類型 Proxy 類別的新執行個體。 這種行為可能會影響效能。 因此,除非絕對必要,否則不要在建構函式中再執行任何作業。

為了將效能的負面影響降到最低,除非使用者在偵錯工具視窗中按一下 + 符號展開類型或使用 DebuggerBrowsableAttribute,否則運算式評估工具不會檢查類型顯示 Proxy 的屬性。 因此,您不應該將屬性放在顯示類型本身上, 屬性可以而且應該用於顯示類型的主體中。

讓類型 Proxy 成為做為屬性目標之類別內的私用巢狀類別,會是較理想的做法。 這樣就可方便它存取內部成員。

DebuggerTypeProxyAttribute 可以繼承,因此如果在基底類別上指定了類型 Proxy,它將套用於任何衍生類別 (除非這些衍生類別指定了自己的類型 Proxy)。

如果在組件層級使用 DebuggerTypeProxyAttribute,則 Target 參數會指定 Proxy 將要取代的類型。

如需如何使用此屬性以及 DebuggerDisplayAttributeDebuggerTypeProxyAttribute 的範例,請參閱使用 DebuggerDisplay 屬性

重要

如果已核取 [工具 / 選項 / 偵錯] 對話方塊中的 [在變數視窗中顯示物件的原始結構] 核取方塊,即忽略 DebuggerDisplay 屬性。

使用泛型搭配 DebuggerTypeProxy

對泛型僅提供有限的支援。 對 C# 來說,DebuggerTypeProxy 只支援開啟類型。 開啟類型也稱為未建構類型,是尚未使用其型別參數的引數具現化的泛型類型。 不支援封閉類型 (也稱為建構類型)。

開啟類型的語法如下所示:

Namespace.TypeName<,>

如果您在 DebuggerTypeProxy 中使用泛型類型做為目標,就必須使用此語法。 DebuggerTypeProxy 機制會自動推斷型別參數。

如需 C# 中開放和封閉類型的詳細資訊,請參閱 C# 語言規格的第 20.5.2 節 <開啟和封閉類型>。

Visual Basic 沒有開放類型語法,因此無法在 Visual Basic 中執行相同的動作。 您必須改用開放類型名稱的字串表示。

"Namespace.TypeName'2"