c# - 如何以另一种方法正确处理本地创建的对象?
问题描述
所以我有一个实现 IDisposable 的类,并且我有几个方法(在另一个类中)遵循以下模式:
public void SomeMethod()
{
DisposableObject disposableObject = new DisposableObject();
// Do some stuff with the object
SomeOtherMethod(disposableObject);
disposableObject.Dispose();
}
虽然所有这些方法都做不同的事情,但它们都SomeOtherMethod
在最后调用,这会在不再需要一次性对象之前对一次性对象做更多的事情。当我disposableObject.Dispose();
进入SomeOtherMethod
时,Visual Studio 给我一条消息说:“使用推荐的处置模式来确保由‘new DisposableObject()’创建的对象被处置在所有路径上:使用语句/声明或尝试/最终”
无论我是否将一次性对象传递给SomeOtherMethod
使用ref
关键字,都会出现此消息。
我的问题是,只要SomeOtherMethod
调用Dispose()
它,该对象就会被处理吗?我假设它会,并且 Visual Studio 继续发送消息只是因为它不“知道”在后续方法中该对象发生了什么,但我很想得到一些确认!
解决方案
它可能被释放或不被释放,取决于执行是否会到达Dispose
调用的事实,这是因为可以在调用之前抛出异常Dispose
。try
finally
通过关键字显式或隐式使用构造using
可确保在任何情况下都会调用它,这就是 VS 向您发出警告的原因。
推荐阅读
- python - 如何使用 Selenium Safari 和 Python 通过输入标签上传文件
- java - 禁用首选项时,是否有可能使首选项中的图标变为灰色?
- docker - 加载后如何运行我的 docker 容器而不运行 docker-compose up?
- spring - 在 Spring Security 中将 eraseCredentials 设置为 false 是否被认为是不好的做法或以任何方式不安全?
- azure-devops - 如何构建 Angular 并将其部署到多个环境?
- javascript - async await 让我脱离了 forEach 循环 javascript
- python - 如何使用 m.sign3 或 m.sign2 来限制方程中使用的非零变量的数量
- python - Python Keras 代码无明显原因内存不足
- sql - T-SQL 中字符串文字的语法是什么?
- java - createNamedStoredProcedureQuery 找不到 @NamedStoredProcedureQuery