如果我使用类似的东西:
using (OdbcConnection conn = new OdbcConnection(....))
{
conn.open();
my commands and sql, etc.
}
我是否必须做conn.close();或者使用声明是否阻止我做最后一次通话?它是否处理了使用块中的所有内容?例如,如果我将其他对象称为unlrelated,那么它是否也会自动消失?
谢谢。在阅读有关在微软网站上使用后,我不清楚。我想确保没有任何内存泄漏。
答案 0 :(得分:6)
请参阅How do I use the using keyword in C#的其他答案的最高位,了解更多信息。
我还应该提到,一旦完成连接就可以关闭(处置)连接以释放资源。指南说调用者应该能够重复调用dispose方法。使用块基本上只是一个安全网,并允许在大多数情况下编写更清晰的代码。
[编辑] 例如使用中的多次初始化:使用相同的初始化多个对象,而不必使用块嵌套,如果对象是相同的类型:
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))
答案 1 :(得分:4)
using语句将处理为您调用Close和Dispose方法。
Scott Hanselman对using语句有很好的解释。
答案 2 :(得分:1)
using语句确保实现IDisposable的对象被释放。它只会处理在使用块中引用的对象,因此您的代码基本上与以下内容相同:
OdbcConnection conn = new ....;
try
{
conn.open();
conn.....
}
finally
{
conn.dispose();
}