使用 IDisposable 进行状态管理
在 C 中,常见的模式涉及使用 A 类的构造函数和析构函数来处理进入和退出条件对于 B 类,确保离开范围时处于已知状态。这不是纯粹的 RAII,而是一种既定做法。
在 C# 中,类似的方法可以与 using 和 IDisposable 一起使用。然而,这种用法引发了一个问题:
问题:使用 using 和 IDisposable 作为获取“范围行为”以实现异常安全的手段是否滥用?
答案:
一些意见认为 using 和 IDisposable 的这种用法是一种虐待。原因如下:
例如,考虑以下内容code:
{ // Unlock the frobble this.Frobble.Unlock(); try { // May throw Foo(); this.Frobble.Fiddle(); Bar(); } finally { // Lock the frobble this.Frobble.Lock(); } }
此代码容易出现解锁后但进入 try 块之前抛出的异常将使 frobble 保持解锁状态的问题。使用using来处理这种状态变化会使该漏洞更难以检测。
因此,通常建议将using用于资源管理的预期目的,并避免将其用于状态管理。
以上是在 C# 中使用'using”和'IDisposable”进行状态管理是否属于滥用?的详细内容。更多信息请关注PHP中文网其他相关文章!