2014-10-01 62 views
0

我有一個對象的實例 - 我該如何擺脫它?我該如何徹底擺脫一個實例?

想象一下:

item1 = new MyItem(123, "Test Item", "I am a test item"); 
item2 = item3 = item1; 
item1 = null; 

創建MyItem的實例,並使用它遍佈在我的代碼的地方(所以有不同的腳本到它的多個引用)。但現在我想說:此產品不再存在!

如果我只將它們中的一個設置爲null,實例將繼續存在,其他引用仍指向它。

有沒有辦法一勞永逸的銷燬實例,所以所有的引用都是空的?

+1

爲什麼?你想達到什麼目的?將變量設置爲不再被引用的空值,不會執行任何操作。 – 2014-10-01 10:59:13

+0

如果你認爲你需要這個,那麼你已經做錯了。 – 2014-10-01 11:08:06

+0

我正在做的是這樣的:我有大量的項目和一個單身人士訪問項目列表。無論什麼時候我的程序需要使用某個項目,它都會從列表中獲取參考。所有這些都來自外部數據庫。如果一個項目得到更新,sync-script會在單例中更改它,而其他每個腳本都會自動知道它。但是,如果某個項目在數據庫中被刪除,並且我將該項目設置爲null,那麼其他人都無法瞭解它。這就是爲什麼我想知道是否有一個簡單的方法來清除所有引用,並讓所有信息都知道這個項目已經消失。 – col000r 2014-10-01 12:33:35

回答

3

(1)您應該查找WeakReference類。通過這種方式,您可以「保留」一個實例而不增加它們的引用次數。但是這會讓你的軟件更加複雜並且容易出錯。

http://msdn.microsoft.com/en-us/library/system.weakreference(v=vs.110).aspx


(2)您可以創建一個包裝,用IsAvailable屬性,將舉行一個實例。

+0

我想我可以只添加一個wasDeleted屬性或字段,我設置爲true之前我將項目引用設置爲空,並檢查每次腳本想要訪問其項目的引用? – col000r 2014-10-01 12:39:33

+0

是的,如果您跨線程訪問您的對象,請不要忘記鎖定。 – 2014-10-01 13:06:49

+1

WeakReference在這裏沒有提供解決方案。 – 2014-10-01 15:00:55