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 будет применён к копии.
Комментариев нет:
Отправить комментарий