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?
}
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. –
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. –
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ć –