|
|
1
1
我假设这些是字段而不是局部变量,因此
从技术上讲,一个对象应该允许多次调用它的
|
|
|
2
7
你应该考虑一下是否可以使用
这确保了
通常不需要在使用完变量后将其设置为null。重要的是,在使用完资源后调用Dispose。如果使用上述模式,不仅不需要将变量设置为null,而且会产生编译错误: Cannot assign to 'c' because it is a 'using variable'
需要注意的是
|
|
|
3
6
你应该实施
它是
not necessary
|
|
|
4
3
如果对象有很多清理工作要做,它们可能希望在单独的一次性物品列表中跟踪需要删除的内容,并一次处理所有这些内容。然后在teardown中,它不需要记住所有需要处理的内容(也不需要检查null,它只是在列表中查找)。
|
|
|
5
1
我假设您在一个方法中创建资源,在另一个方法中处理它,并在一个或多个其他方法中使用它,使
在这种情况下,你的方法很好。
大多数对象都有一个资源——内存,垃圾收集负责释放内存,所以我们不必担心它。有些还拥有其他资源:文件句柄、数据库连接等。对于第二类,我们必须实现IDisposable,以释放其他资源。 一旦调用Dispose方法,这两个类别将保持相同:它们持有内存。在这种情况下,我们可以让变量超出作用域,删除对内存的引用,并允许GC最终释放它——或者我们可以通过将变量设置为null,并显式删除对内存的引用来强制解决问题。我们仍然要等到GC启动后才能真正释放内存,而且变量很可能会超出作用域,在设置为null的瞬间之后,所以在绝大多数情况下,它根本没有效果,但在少数情况下,它会允许内存提前几秒钟释放。 但是,如果您的具体情况是检查null以确定是否应该调用Dispose,那么 如果有可能调用Dispose()两次,请将其设置为null。 |
|
|
6
1
考虑到iDisposable不包括任何确定对象是否已被释放的标准方法,我喜欢在释放对象时将其设置为null。当然,处理一个已经被处理的对象是无害的,但是能够在监视窗口中检查一个对象并一眼就知道哪些字段已经被处理是很好的。能够进行代码测试也很好,以确保应该被释放的对象是(假设代码在释放变量时遵守将变量置零的约定,而不是在其他时间)。 |
|
|
7
0
|
|
|
8
0
其他人建议
|
|
|
9
0
您不需要将变量设置为
我确信这有一个标准的模式名称,但我只是称之为“摧毁你所创造的一切,但没有别的”。 |
|
|
10
0
|