共用方式為


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

DebuggerTypeProxyAttribute 指定類型的代理或替代項,並變更類型在偵錯工具視窗中的顯示方式。 當您檢視具有 Proxy 的變數時,Proxy 會取代 顯示中的原始類型。 偵錯工具變數視窗只會顯示 Proxy 類型的公用成員。 不會顯示私人成員。

此屬性可套用至:

  • 結構體系
  • 課程
  • 組件

備註

對於原生程式碼,只有 C++/CLI 程式碼才支援此屬性。

類型代理類別必須具有一個建構函式,該建構函式需要接受一個要被代理取代的類型引數。 偵錯工具會在每次需要顯示目標類型的變數時,都會建立類型 Proxy 類別的新實例。 這可能會對效能產生影響。 因此,請避免在建構函式中進行任何不必要的工作。

為了將效能損失降到最低,運算式評估器不會檢查類型顯示 Proxy 上的屬性,除非使用者在偵錯工具視窗中點擊 + 符號以擴展類型,或使用 DebuggerBrowsableAttribute。 因此,請勿將屬性放在顯示類型本身上。 屬性可以而且應該在顯示類型的主體中使用。

最好的做法是將類型 Proxy 作為屬性所針對類別中的一個私有巢狀類別。 這使其能夠輕鬆存取內部成員。

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

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

如需如何使用此屬性與 DebuggerDisplayAttributeDebuggerTypeProxyAttribute一起使用的範例,請參閱 使用 DebuggerDisplay 屬性

這很重要

如果您選取 在 變數視窗中顯示物件的原始結構 選項,則會忽略屬性 DebuggerDisplay 。 此設定位於 [工具>選項] 窗格的 [所有設定>偵錯>一般] 區段中。

這很重要

如果您選取 在 變數視窗中顯示物件的原始結構 選項,則會忽略屬性 DebuggerDisplay 。 此設定位於 [工具選項]對話方塊中偵錯 [一般] 區段。

搭配 DebuggerTypeProxy 使用泛型

對泛型的支援有限。 針對 C#, DebuggerTypeProxy 僅支援開放類型。 開啟類型 (也稱為未建構類型) 是泛型類型,不會使用其類型參數的引數具現化。 不支援封閉類型,也稱為建構類型。

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

Namespace.TypeName<,>

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

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

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

"Namespace.TypeName'2"