日期:2014-05-20  浏览次数:20783 次

请问,这个代码中的using是啥意思
MSDN上的第一个例子:
http://msdn.microsoft.com/zh-cn/library/db5x7c0d(v=VS.100).aspx

class Test
{
  public static void Main()
  {
  try
  {
  using (StreamReader sr = new StreamReader("TestFile.txt"))
  {
  String line;
  while ((line = sr.ReadLine()) != null)
  {
  Console.WriteLine(line);
  }
  }
  }
  catch (Exception e)
  {  
  Console.WriteLine("The file could not be read:");
  Console.WriteLine(e.Message);
  }
  }
}



两个问题:
1:using 是什么语法哦,没看到过呢? 不会是引用命名空间吧?

2:StreamReader 是什么东西?给个MSDN链接,

------解决方案--------------------
代码中的using是对象sr只在using块中使用,系统只能释放sr对象,无需你自己释放
http://msdn.microsoft.com/query/dev10.query?appId=Dev10IDEF1&l=ZH-CN&k=k(VB.USING);k(TargetFrameworkMoniker-%22.NETFRAMEWORK%2cVERSION%3dV4.0%22);k(DevLang-VB)&rd=true

StreamReader是i/o流读取类
http://msdn.microsoft.com/query/dev10.query?appId=Dev10IDEF1&l=ZH-CN&k=k(SYSTEM.IO.STREAMREADER);k(TargetFrameworkMoniker-%22.NETFRAMEWORK%2cVERSION%3dV4.0%22);k(DevLang-VB)&rd=true
------解决方案--------------------
using是作用域。
在离开using作用域时会强制调用()内对象的Dispose()方法。
所以()中的对象都必须实现IDisposable接口

实际上编译后就是

try
{
...using作用域内代码
}
finally
{
using()内对象.Dispose();
}
------解决方案--------------------
using语法用于和IDisposable接口配合使用

MSDN的说明

在using语句块执行完毕之后会调用using对象的IDisposable接口的Dispose()方法

对于StreamReader来说,他的Dispose方法会调用Close方法从而关闭文件

using的优势在于,但语句块中抛出异常时,Dispose方法依然会被调用,从而确保无论如何,只要离开该段语句块就一定能够释放资源
------解决方案--------------------
要类实现了IDisponse接口,就能用using了,表示超出作用域自动调用disponse
StreamRead sr=new StreamRead("***.txt);
using(sr as IDisponse)
{
//Code...
}
这个写法也可以
------解决方案--------------------
探讨
using语法用于和IDisposable接口配合使用

MSDN的说明

在using语句块执行完毕之后会调用using对象的IDisposable接口的Dispose()方法

对于StreamReader来说,他的Dispose方法会调用Close方法从而关闭文件

using的优势在于,但语句块中抛出异常时,Dispose方法依然会被调用,从而确保无论如何,只要离开该段语句……

------解决方案--------------------
来晚了,只能曾分了。
------解决方案--------------------
using用来指定一个对象的使用域,当超出using所指定的域空间后,系统会强制性释放对象
------解决方案--------------------
使用托管,自动释放资源!类似于你上厕所,小便之后会自动放水,冲洗小便池一样的。。你上大便要自己手动按下开水的才会 释放资源。所以用using()就是等于你上小便,做完事情之后系统会自动帮你回收资源,关闭资源。
------解决方案--------------------
上面说的对,是作用域。
简单点说就是出了这块代码,变量自己释放。
------解决方案--------------------
里面的东西不用你自己释放
------解决方案--------------------
作用域
------解决方案--------------------
楼上说的都对

举个例子:
C# code
using(sqlConnection con=new sqlConnection("连接串"))
{
  con.Open();
  代码;
  //不需要写con.Close();因为当出了using的花括号,con对象就会被自动释放
}

------解决方案--------------------