Страницы

Поиск по вопросам

четверг, 5 декабря 2019 г.

Dispose() в структуре

#c_sharp


public struct S : IDisposable
{
    private bool dispose;
    public void Dispose()
    {
        dispose = true;
    }
    public bool GetDispose()
    {
        return dispose;
    }
}


В примере ниже будет выведено: false false

var s = new S();
using (s)
{
    Console.WriteLine(s.GetDispose());
}
Console.WriteLine(s.GetDispose());


Почему второй раз вышло false, ведь метод Dispose() вызвался?
Спасибо.
    


Ответы

Ответ 1



На эту тему есть хорошая статья от Липперта. Конкретно на Ваш вопрос ответ будет таков: код using (s) { ... } на самом деле будет выполнен как using (S s2=s) { ... } А поскольку структуры копируются по значению, а не по ссылке, все действия будут производиться над копией, а не над исходным экземпляром. И Dispose будет применён к копии.

Комментариев нет:

Отправить комментарий