У меня есть класс, который должен удалить некоторый файл, когда он будет удален или завершен. Внутри финализаторов я не могу использовать другие объекты, потому что они уже могли быть собраны в мусор.
Я пропустил какой-то вопрос относительно финализаторов и строк?
UPD: Что-то вроде этого:
public class TempFileStream : FileStream
{
private string _filename;
public TempFileStream(string filename)
:base(filename, FileMode.Open, FileAccess.Read, FileShare.Read)
{
_filename = filename;
}
protected override void Dispose(bool disposing)
{
base.Dispose(disposing);
if (_filename == null) return;
try
{
File.Delete(_filename); // <-- oops! _filename could be gc-ed already
_filename = null;
}
catch (Exception e)
{
...
}
}
}