Struct S реализует IDisposable. Что выведет GetDispose() внутри и после блока using(s), если Dispose меняет поле dispose?

C# / .NET Основы языка Junior

Что это: Для value type блок using работает с копией struct: Dispose вызывается на копии, а исходная переменная s не меняется. Оба вызова GetDispose() вернут false.

Почему важно: Показывает разницу между using для class и struct и объясняет, почему IDisposable на struct часто реализуют через ref struct или class-обёртку.

Под капотом: Компилятор разворачивает using в try/finally с вызовом Dispose на локальной копии struct. Без ref using изменения в Dispose не попадают в исходную переменную на стеке.

Типичная ошибка: Ожидать true после using для struct, как для reference type, где Dispose меняет состояние того же объекта в куче.

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

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