请问,这个代码中的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用来指定一个对象的使用域,当超出using所指定的域空间后,系统会强制性释放对象
[解决办法]
使用托管,自动释放资源!类似于你上厕所,小便之后会自动放水,冲洗小便池一样的。。你上大便要自己手动按下开水的才会 释放资源。所以用using()就是等于你上小便,做完事情之后系统会自动帮你回收资源,关闭资源。
[解决办法]
上面说的对,是作用域。
简单点说就是出了这块代码,变量自己释放。
[解决办法]
里面的东西不用你自己释放
[解决办法]
作用域
[解决办法]
楼上说的都对
举个例子:
- C# code
using(sqlConnection con=new sqlConnection("连接串")){ con.Open(); 代码; //不需要写con.Close();因为当出了using的花括号,con对象就会被自动释放}
------解决方案--------------------
你在msdn 左侧的文本框 可以输入并搜索的
[解决办法]
楼上几位说的很清楚了,其实这些去msdn一查一目了然了
[解决办法]
using除了引用命名空间,就是声明作用域,只要程序运行在作用域之外,用using声明的对象就会被强制注销,释放资源,可以这样理解吗?
[解决办法]
1. 使用 using 语句的前提是这个类必须实现了 IDisposable 接口
2. 举个例子就明白了:
用 using 的情况:
using (MyDisposableClass cls = new MyDisposableClass())
{
......
}
不用 using 的情况:
try
{
MyDisposableClass cls = new MyDisposableClass();
......
}
finally
{
cls.Dispose();
}
另外说明一下:using 不会捕获异常,如果需要捕获异常,不要使用 using,手动改成 try...catch...finally 形式。
[解决办法]
变量自己释放。
[解决办法]
蹭分咯!上面的几位解释得都很清楚,就是作用域,并且变量自动释放。
[解决办法]
Using 有两种作用,
第一:使用完之后自动释放资源,比如数据库连接等等。
第二:引用命名空间,就像每一个CS文件最前面的一部分。
下面的例子演示了如何读写一个文件,楼主可以参考一下,纯粹的文件流操作:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.IO;
namespace WrittenorRead
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void btnWrite_Click(object sender, EventArgs e)
{
string path = textBox1.Text;
string content = txtcontent.Text;
if (string.IsNullOrEmpty(path) == true)
{
MessageBox.Show("文件路径不能为空!","提示",MessageBoxButtons.OK,MessageBoxIcon.Error);
return;
}
try
{
//创建文件流
FileStream myFs = new FileStream(path, FileMode.Create);
//创建写入器
StreamWriter mySw = new StreamWriter(myFs);
//将录入的内容写入文件
mySw.Write(content);
//关闭写入器
mySw.Close();
//关闭文件流
myFs.Close();
MessageBox.Show("写入成功!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message.ToString());
}
}
private void btnbutRead_Click(object sender, EventArgs e)
{
string path = textBox1.Text;
string content = txtcontent.Text;
if (string.IsNullOrEmpty(path) == true)
{
MessageBox.Show("文件路径不能为空!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
try
{
//创建文件流
FileStream myFs = new FileStream(path, FileMode.Open);
//创建读取器
StreamReader mySr = new StreamReader(myFs);
//读取文件的内容
content = mySr.ReadToEnd();
txtcontent.Text = content;
//关闭文件流
mySr.Close();
//关闭读取器
myFs.Close();
MessageBox.Show("读取成功!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message.ToString());
}
}
}
}
[解决办法]
大家说的很正确,就是释放资源的~
[解决办法]
在using语句块执行完毕之后会调用using对象的IDisposable接口的Dispose()方法
对于StreamReader来说,他的Dispose方法会调用Close方法从而关闭文件
using的优势在于,但语句块中抛出异常时,Dispose方法依然会被调用,从而确保无论如何,只要离开该段语句块就一定能够释放资源
[解决办法]
恩,都说得很清楚...