【发布时间】:2020-06-16 13:12:42
【问题描述】:
在 c# struct 和 using 语句中发现了一些奇怪的行为。不知道为什么会这样。 示例结构:
public struct Thing : IDisposable {
private bool _dispose;
public void Dispose() {
_dispose = true;
}
public bool GetDispose() {
return _dispose;
}
public void SetDispose(bool dispose) {
_dispose = dispose;
}
}
以及这个结构的用法:
var thing = new Thing();
using (thing) {
Console.WriteLine(thing.GetDispose());
}
Console.WriteLine(thing.GetDispose());
我希望在这里看到以下输出:
False
True
因为 Dispose() 方法在使用范围结束时被调用。 但我明白了:
False
False
如果我将 struct 更改为 class,或者使用 struct 并添加 thing.SetDispose(true);在使用范围内,我得到了预期的输出
False
True
我的问题是为什么我会用结构得到 False False? 我用调试器检查过,每次使用范围结束时都会调用 Dispose()。
【问题讨论】:
-
看看生成的 IL 会很有趣
-
@pm100 Here you go
-
v struct -> class 时奇怪的、微妙的代码更改。寻呼飞碟先生
-
为什么不使用“_dispose”的属性?
标签: c# .net-core struct idisposable