Страницы

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

четверг, 11 октября 2018 г.

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

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() вызвался? Спасибо.


Ответ

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

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

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