我明白这一点:
using (StreamWriter sw = new StreamWriter("file.txt"))
{
// d0 w0rk s0n
}
我尝试查找信息的所有内容都没有解释这是做什么的,而是给了我关于命名空间的东西。
答案 0 :(得分:12)
您想查看using statement的文档(而不是关于命名空间的 using指令)。
基本上它意味着块被转换为try
/ finally
块,并且在finally块中调用sw.Dispose()
(使用适当的无效检查)。
您可以在任何处理实现IDisposable
的类型的地方使用using语句 - 通常您应该将它用于您负责的任何一次性对象。
有关语法的一些有趣内容:
您可以在一个语句中获取多个资源:
using (Stream input = File.OpenRead("input.txt"),
output = File.OpenWrite("output.txt"))
{
// Stuff
}
您不必分配给变量:
// For some suitable type returning a lock token etc
using (padlock.Acquire())
{
// Stuff
}
你可以在没有牙套的情况下筑巢;方便避免缩进
using (TextReader reader = File.OpenText("input.txt"))
using (TextWriter writer = File.CreateText("output.txt"))
{
// Stuff
}
答案 1 :(得分:10)
using构造本质上是一个语法包装器,可以在使用中自动调用对象上的dispose。例如,您的上述代码大致可转换为以下内容
StreamWriter sw = new StreamWriter("file.text");
try {
// do work
} finally {
if ( sw != null ) {
sw.Dispose();
}
}
答案 2 :(得分:5)
您的问题由规范的第8.13节解答。
答案 3 :(得分:2)
在这里:http://msdn.microsoft.com/en-us/library/yh598w02.aspx
基本上,它会在使用范围的末尾自动调用IDisposable接口的Dispose成员。
答案 4 :(得分:0)