这里所说的 using 并不是 @ Import、using 与 Imports 一文的 using。
C# 中,using 关键字可以创建 using 指令和 using 语句,分别对应 VB 中的 Imports 语句和 using 语句。
C# 和 VB 中的 using 语句作用是:定义一个范围,将在此范围之外释放一个或多个对象。
.NET Framework 公共语言运行库 (CLR) 会自动释放用于存储不再需要的对象的内存,但是通常由程序来尽快释放不需要内存更好一些,using 就实现了由程序来控制什么时候释放内存。
看示例(根据微软示例修改),使用 using 的语句调用了 IDisposable.Dispose,而未使用 using 的则没有调用。为 using 语句提供的对象必须实现 IDisposable 接口。
<%@ Page Language="C#" Debug="true" %>
<script runat="server">
class C : IDisposable
{
Label lb;
public C(Label Alb)
{
lb = Alb;
}
public void UseLimitedResource()
{
lb.Text += "Using limited resource...<br />";
}
void IDisposable.Dispose()
{
lb.Text += "Disposing limited resource.<br />";
}
}
void Page_Load(object sender, EventArgs e)
{
using (C c = new C(lb))
{
c.UseLimitedResource();
}
lb.Text += "Now outside using statement.<br />";
C c2 = new C(lb2);
c2.UseLimitedResource();
}
</script>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>Using 语句(C#)</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:Label ID="lb" runat="server"></asp:Label>
<hr />
<asp:Label ID="lb2" runat="server"></asp:Label>
</div>
</form>
</body>
</html>
将显示
Using limited resource...
Disposing limited resource.
Now outside using statement.
Using limited resource...
Using 块的工作方式类似于 Try...Finally 构造,在该构造中,Try 块使用资源,而 Finally 块释放资源。因此,不管您如何退出块,Using 块都可确保资源的释放。即使发生未处理的异常(除 StackOverflowException 外),也是如此。
相关阅读