C# c中的使用构造是什么#
我看到:C# c中的使用构造是什么#,c#,.net,vb.net,using,C#,.net,Vb.net,Using,我看到: using (StreamWriter sw = new StreamWriter("file.txt")) { // d0 w0rk s0n } 我试图查找的所有信息都没有解释它的作用,而是提供了有关名称空间的信息。您想查看的文档(而不是关于名称空间的using指令) 基本上,这意味着将块转换为try/finally块,并在finally块中调用sw.Dispose() 您可以在处理实现IDisposable的类型的任何地方使用using语句,通常您应该将其用于您负责的任
using (StreamWriter sw = new StreamWriter("file.txt"))
{
// d0 w0rk s0n
}
我试图查找的所有信息都没有解释它的作用,而是提供了有关名称空间的信息。您想查看的文档(而不是关于名称空间的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
}
using构造本质上是一个语法包装器,用于在using中自动调用dispose对象。例如,上面的代码大致翻译成以下内容
StreamWriter sw = new StreamWriter("file.text");
try {
// do work
} finally {
if ( sw != null ) {
sw.Dispose();
}
}
给你:
基本上,它会在使用范围结束时自动调用IDisposable接口的Dispose成员。规范第8.13节回答了您的问题。检查此项我为什么要Dispose而不是懒惰?它像uber垃圾收集吗?@Joshua:自己清理-例如,你不想留下打开的文件句柄。@Joshua:作用域定义了最小生存期,而不是最大生存期。这是一种垃圾收集语言;收集器可以在任何时候运行。@Joshua:因为C#没有确定性终结。你是C++开发者吗?非常清楚地说明了本地C++对象生命周期和.NET中的区别,垃圾回收器在收集对象之前可能会等待一段时间。C#3规格:哈哈。我正要否决一个毫无帮助的答案,但后来我注意到了是谁。我想你可以这样回答。@Simon:阅读说明书是无可替代的。当我对该语言有疑问时,我就是这么做的。完全重复:@Hun1Ahpu:请尽量只给出当前对MSDN的引用。我修复了你的链接。