C#学习笔记 - using语句

using语句

某些类型的非托管对象有数量限制或很耗费系统资源, 在代码使用完他们后, 尽快释放他们是很重要的using语句有助于简化这一过程, 并确保这些资源被适当的处理

(0)资源

指实现了System.IDisposable接口的类或结构. IDisposalbe接口中有个Dispose的方法, 使用这个方法去处置资源

  • 如果正在使用的资源那部分代码中产生了一个异常的运行时错误, 那么可能处置资源的代码无法执行

(1)包装资源的使用

using语句帮助减少意外的运行时错误带来的潜在的问题, 整洁的包装了资源的使用

using(分配资源) 使用资源
using(ResourceType Identifier  Expression) Statement
  • 圆括号内代码表示分配资源

  • Statement是使用资源代码

  • using语句隐式产生处置该资源的代码

    • 分配资源

    • 把Statement放入try块

    • 创建资源的Dispose方法的调用, 并把它放入finally块

例子
static void Main(string[] args)
{
   //打开一个文本文件, 并向其中写入一行
   using (TextWriter tw = File.CreateText("Lin.txt"))
  {
       tw.WriteLine("123123lin");
  }
//打开相同的文本文件, 一行一行读取并显示它的内容
   using (TextReader tr = File.OpenText("Lin.txt"))
  {
       string InputString;
       while((InputString = tr.ReadLine()) != null)
      {
           Console.WriteLine(InputString);
      }
  }
}

(3)多个资源和嵌套

声明相同类型的多个资源

using(ResourceType Id1 = Expr1, Id2 = Expr2) Statement

嵌套声明

using(ResourceType Id1 = Expr1)
{
   Statement;
   using(ResourceType id2 = Expr2)
  {
  Statement;    
  }
}
例子
using (TextWriter tw1 = File.CreateText("Lin.txt"),
      tw2 = File.CreateText("Fra.txt"))
{
   tw1.WriteLine("123123lin");
   tw1.WriteLine("123123fra");
}
using (TextReader tr1 = File.OpenText("Lin.txt"),
      tr2 = File.OpenText("Fra.txt"))
{
   string InputString;
   while ((InputString = tr1.ReadLine()) != null)
  {
       Console.WriteLine(InputString);
  }
   while ((InputString = tr2.ReadLine()) != null)
  {
       Console.WriteLine(InputString);
  }
}
using (TextWriter tw1 = File.CreateText("Lin.txt"))
{
   tw1.WriteLine("123123lin");
   using (TextWriter tw2 = File.CreateText("Fra.txt"))
       tw1.WriteLine("123123fra");
}
using (TextReader tr1 = File.OpenText("Lin.txt"),
      tr2 = File.OpenText("Fra.txt"))
{
   string InputString;
   while ((InputString = tr1.ReadLine()) != null)
  {
       Console.WriteLine(InputString);
  }
   while ((InputString = tr2.ReadLine()) != null)
  {
       Console.WriteLine(InputString);
  }
}

(4)提前声明形式

TextWriter tw = File.CreateText("lin.txt");
using (tw)
{
   tw.WriteLine("123123lin");
}
  • 虽然这样也能保证使用完整资源后总是会调用Dispose方法

  • 但它不能防止在using语句已经释放了它的非托管资源后使用该资源

  • 这可能会导致状态不一致, 提供了较少的保护, 不推荐

posted on   老菜农  阅读(45)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具

导航

统计信息

点击右上角即可分享
微信分享提示