C#开发疑问:是否存在无需处置即将超出作用域的IDisposable对象的场景?
关于C# IDisposable对象处置的疑问与思考
我有C开发背景,在C中变量超出作用域会立刻触发析构函数,所有清理操作均在析构函数中完成,执行时机完全确定。但作为C#新手,我多次因忘记正确处理IDisposable对象,导致大量非托管资源未释放,最终引发程序崩溃,因此专门深入学习了Disposable模式。
我发现C#的设计似乎更容易让开发者意外错误实现,而非意外正确实现。比如正确使用IDisposable对象的代码如下:
public void DoSomething() { using ClassThatImplementsIDisposable obj = new ClassThatImplementsIDisposable(); // do stuff }
这段代码中,由于使用了using关键字,变量超出作用域时会自动调用Dispose方法。但我偶尔会忘记添加using,进而引发资源问题,因此产生了一个疑问:
是否存在这样的场景:创建实现IDisposable接口的对象,该对象即将超出作用域(包括引用计数归零时),但我不希望它被处置?
举个例子,下面这段代码中,有没有故意省略using的合理理由?
public void DoSomething() { ClassThatImplementsIDisposable obj = new ClassThatImplementsIDisposable(); // do stuff }
如果确实存在这类场景,我认为C#的设计若改为默认在引用计数归零时自动处置所有IDisposable对象,仅用类似notusing的关键字标记无需处置的例外情况,会对开发者更友好。
内容的提问来源于stack exchange,提问作者Stanton
相关产品推荐
相关产品推荐

