0
如何防止API的用戶存儲對由API返回的對象的引用,例如,在作爲參數提供時,在使用塊外存儲引用或在回調(動作委託調用)之外存儲引用?不允許創建第二個引用(C#中的unique_ptr行爲)
如何防止API的用戶存儲對由API返回的對象的引用,例如,在作爲參數提供時,在使用塊外存儲引用或在回調(動作委託調用)之外存儲引用?不允許創建第二個引用(C#中的unique_ptr行爲)
你不能讓人們避免引用。你可以做的是使對象無用。實施IDisposable
似乎是一個很好的方法來做到這一點。所以,你可以讓你這樣的回撥電話,以確保一旦回調完成後,它的配置:
using (var myDisposable = GetStuff())
myAction(myDisposable);
這是給您記錄您的API,然後信任你的用戶不會搬起石頭砸自己與它的腳。
在調試模式下顯式調用'GC.Collect()'並對倖存者進行計數也可以幫助檢測引用被保留在適當範圍之外。 –
如果你的API只包含幾個類,你可以在所有的類中創建類型特定的包裝器,每個包裝器在一個專用字段中持有* real *對象的'WeakReference'。 ('IDisposable'是一個更好的方法,只是爲了討論而拋出想法!) –
wablab