2013-04-13 4 views
18

Po prostu wprowadziłem model Dispose, a kiedy właśnie wpisałem linię GC.SuppressFinalize(this), zastanawiałem się, czy kiedykolwiek istnieje przypadek użycia innego parametru niż this jako parametru metody.Czy istnieje przypadek użycia, aby nie używać "this" podczas wywoływania GC.SuppressFinalize (this)?

Jest to typowy wzór:

public void Dispose() 
{ 
    Dispose(true); 
    GC.SuppressFinalize(this); // right here 
} 

Czy kiedykolwiek sensu dzwonić GC.SuppressFinalize() z czymś innym niż this?

public void Dispose() 
{ 
    Dispose(true); 
    GC.SuppressFinalize(foo); // should this ever happen? 
} 
+9

Jedyny moment, w którym mogłem sobie wyobrazić, że jest użyteczny, to jeśli używasz trzeciej klasy, która ma finalizator i metodę Dispose(), ale z jakiegoś powodu sama nie wywołuje 'GC.SuppressFinalize()'. Wtedy teoretycznie mógłbyś to naprawić, wywołując SuppressFinalize() dla obiektu explicity po wywołaniu dla niego Dispose(). Ale to brzmi dość daleko idące. –

+2

Oczywiście są zastosowania, które nie są zbyt powszechne. W obiektach takich jak pula obiektów. Ale to nie jest dobre pytanie dla SO. –

+1

Naprawdę niewiele scenariuszy. Również zgodnie z pytaniem na pasku bocznym (Kiedy powinienem użyć GC.SupressFinalize()?), Górna odpowiedź mówi | Nie ulegaj pokusie, aby zadzwonić do SuppressFinalize na innych przedmiotach. To poważna usterka, która czeka, by się wydarzyć –

Odpowiedz

2

Zgodnie z MSDN:

http://msdn.microsoft.com/en-us/library/system.gc.suppressfinalize.aspx

Jest to bowiem możliwe, że Twój przykład: GC.SuppressFinalize (foo) zostaną wykorzystane w pewnych sytuacjach, ale nie w scenariuszu wspólny wzór zbycia.

Na przykład, możesz chcieć napisać jakiś wzór zarządzania utylizacją dla wielu obiektów, zamiast implementować wspólny wzorzec utylizacji z wnętrza obiektu. inną opcją jest, jeśli chcesz, aby obiekt pozostał zniekształcony, a później może go odebrać? nigdy tego nie zrobiłem ... ale jest to możliwe.

Tak możliwe, tak .. może się zdarzyć nie - i prawdopodobnie nigdy.

Powiązane problemy