如果我使用类似的东西:

using (OdbcConnection conn = new OdbcConnection(....))
{
  conn.open();
  my commands and sql, etc.
}

我必须做一个conn.close();还是使用语句使我无法执行最后一次通话?它是否处置了使用块中的所有内容?例如,如果我调用其他对象未与之相关,它也会自动含义这些对象吗?

谢谢你。在阅读有关Microsoft网站上使用的信息后,我不清楚。我想确保没有任何记忆泄漏。

有帮助吗?

解决方案

  1. 使用块将处置ODBCConnection。
  2. 正常范围规则适用于使用块内声明的任何内容。
  3. 使用块将不会清理任何其他可IDISPOSOS的对象。它只清理声明的项目
    • 请注意,您可以使用块筑巢,或者如果项目是相同的类型,则可以同时初始化多个项目。

请参阅我的其他答案的顶部 如何在C#中使用使用关键字 有关更多信息。

我还应该提到,您可以在发布资源后立即关闭连接(处置)。准则说,呼叫者应该能够反复调用处置方法。使用块本质上只是安全网,在大多数情况下允许编写更清晰的代码。


编辑]例如,在A中使用以下方式:在同一对象中初始化多个对象,而无需嵌套如果对象是相同的类型:

using (Bitmap b1 = new Bitmap("file1"), b2 = new Bitmap("file2")) 
{ ... }

乔尔·科霍恩(Joel Coehoorn for, , 或者 if 陈述。 UI没有缩进。我很好奇IL的样子。

using(Bitmap b = new Bitmap("filex"))
using(Graphics g = Graphics.FromImage(b))
{ 
}

使用将不同的对象放在同一的错误是错误的 error CS1044: Cannot use more than one type in a for, using, fixed, or declaration statement.

// error CS1044
using(Bitmap b = new Bitmap("filex"), Graphics g = Graphics.FromImage(b)) 

其他提示

使用语句将处理呼叫关闭并为您处理方法。

斯科特·汉塞尔曼(Scott Hanselman) 对使用语句有很好的解释。

使用语句可确保将实现Idisposable的对象处置。它仅处理使用块中引用的对象,因此您的代码基本上等同于:

OdbcConnection conn = new ....;
try
{
   conn.open();
   conn.....
}
finally
{
   conn.dispose();
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top