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

275
11 марта 2017, 00:40
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() вызвался? Спасибо.

Answer 1

На эту тему есть хорошая статья от Липперта.

Конкретно на Ваш вопрос ответ будет таков: код

using (s)
{
...
}

на самом деле будет выполнен как

using (S s2=s)
{
...
}

А поскольку структуры копируются по значению, а не по ссылке, все действия будут производиться над копией, а не над исходным экземпляром. И Dispose будет применён к копии.

READ ALSO
Не заменяется цвет на изображении через Magick.Net

Не заменяется цвет на изображении через Magick.Net

В общем, белый цвет заменяется на темно-серый, хотя в TargetColor RGB равен зеленому цвету (R - 0, G - 255, B - 0)

230
как получить доступ к чужому google calendar через api

как получить доступ к чужому google calendar через api

Подсмотрел в чужом приложении что нужно перейти по ссылке например

264
Как добавить таблицу в Word файле через C#?

Как добавить таблицу в Word файле через C#?

Добрый день, подскажите, как можно дописать код? Мне нужно открыть шаблон word-файла, сделать правки и в самом конце добавить таблицуПервые...

401
Блокирует ли Брендмауэр Net.sockets? C#

Блокирует ли Брендмауэр Net.sockets? C#

На первые 4 вопроса ответ простой - зависит от настроекЕсли сетевой администратор истинный параноик, то в сети все будет разрешено только...

293