例如,可以通过以下方法创建可支配资源的新实例:
var resource = CreateNewResource();在下面的编码样式中,如果有的话,有什么不同?
第一种风格:
var resource = CreateNewResource();
using (resource)
{
//Use resource
}第二种风格:
using (var resource = CreateNewResource())
{
//Use resource
}如果我们不打算在using块之外的任何地方使用资源,那么第一种类型的编码实践是否很糟糕?
即使我们希望使用using块之外的资源,是否应该鼓励在using块之外使用一次性资源呢?
发布于 2016-04-26 16:06:02
第一个值得注意的区别是,在第一个代码段中,变量资源仍然是在using块之后声明的,因此在释放它之后,有人可以使用它,这是不好的。
var resource = CreateNewResource();
using (resource)
{
//Use resource
}
...
// Unknowingly continues to use resource
resource.BadActOnDisposedObject();如果您确实想更自由地使用和分配资源,我建议您使用“尝试/最后”,如下所示:
Resource resource = null;
try
{
// do whatever
resource = CreateNewResource();
// continue to do whatever
}
finally
{
if (resource != null)
{
resource.Dispose();
resource = null;
}
}这可以保证您的资源在任何情况下都会得到处理。
发布于 2016-04-26 16:26:17
好的..。因此,这显然是一种糟糕的做法。
相当不错的记录在MSDN上
您可以实例化资源对象,然后将变量传递给using语句,但这不是最佳实践。在这种情况下,即使对象可能不再访问其非托管资源,但在控件离开using块之后,对象仍然在作用域内。换句话说,它将不再被完全初始化。如果尝试在using块之外使用对象,则可能会引发异常。因此,通常最好在using语句中实例化对象,并将其作用域限制在using块上。
我在网上看到了这种风格。在我自己的代码中,每当样式2中的资源声明语句非常长时,我就从using(){}中提取声明,然后编写样式1中提到的代码,以提高代码的可读性。
https://stackoverflow.com/questions/36870131
复制相似问题