EventHandlers и деструктор/Располагать Классов C#

<div style="height:0;width:0;overflow:hidden;">
<!-- content here -->
</div>

Кстати, это - то, что я делаю, чтобы предварительно загрузить изображения, который хорош, потому что это не использует JavaScript.

Visibility:hidden не сделает того же самого, потому что некоторые браузеры умны и не выполнят запрос, если это не думает свое на самом деле видимое.

24
задан default locale 29 July 2014 в 12:37
поделиться

2 ответа

Не делайте этого в деструкторе, потому что он не будет вызываться, пока прикреплены обработчики событий: когда вы присоединяете метод экземпляра Foo в качестве обработчика для события Bar, Bar будет содержать ссылку на Foo, поэтому Foo не будет собираться мусором и его деструктор не будет вызываться.

Вы должны реализовать IDisposable и явно удалить свой объект

public void Dispose()
{
    if (handler != null)
    {
        handler.Load -= Load;
        handler.Close -= Close;
    }
}
26
ответ дан 29 November 2019 в 00:06
поделиться

Если вы когда-нибудь столкнетесь с проблемой того, что класс A будет долгоживущим классом, а класс (а) B - короткоживущими, которые подписываются на события класса A, то вы, вероятно, заинтересуетесь Шаблон слабого события . Это может быть проблема, которую вы не обнаружите, пока не станет слишком поздно, например Принстонский беспилотный автомобиль.

3
ответ дан 29 November 2019 в 00:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: