首页 > 编程语言 >C#学习笔记 - using语句

C#学习笔记 - using语句

时间:2023-05-24 16:57:37浏览次数:48  
标签:语句 File C# InputString WriteLine using txt 资源

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语句已经释放了它的非托管资源后使用该资源

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

标签:语句,File,C#,InputString,WriteLine,using,txt,资源
From: https://www.cnblogs.com/phonk/p/17428842.html

相关文章

  • abc260_f Find 4-cycle 题解
    Find4-cycle题意有一个\(s+t\)个点\(m\)条边的简单无向图\(G\)。点标号为\(1\cdotss+t\),边标号为\(1\cdotsm\)。第\(i\)条边连接点\(u_i\)和\(v_i\)。如果\(G\)中包含一个大小为\(4\)的简单环,选择任意一个并按任意顺序输出环上的\(4\)个点。若不存......
  • Comparable、 Comparator、 Comparato、 Compara区别
    Comparable接口在创建类时要手动实现并重写compareTo方法,一旦实现,每次用该类都有指定的顺序,属于内部顺序。如果要更换比较的方式,则要修改compareTo方法,侵入性强。 Comparator(比较器)接口实现后作为参数传入Collections.sort。每次使用都要确定比较器,比较方式在实现比较器......
  • 图像分类基于cnn的戴口罩和不戴口罩的分类任务-详细教程文档(视频同款)
    图像分类基于cnn的戴口罩和不戴口罩的分类任务-详细教程文档(视频同款)......
  • 【服务治理】基于SpringCloudAlibaba微服务组件的灰度发布设计(二)
    一.背景在上文中,灰度发布遇到了些问题,例如:1.动态修改Nacos配置中心的元数据信息,如何同步到Nacos注册中心对应服务的列表中2.管理后台业务调用其它服务灰度实例时的路由规则二.解决方案//TODO ......
  • docker在多网口使用下,某个网口无法使用端口
    https://blog.csdn.net/weixin_44911287/article/details/123638796开启IP转发功能编辑/etc/sysctl.conf文件:nano/etc/sysctl.conf添加该行内容或去除注释该行内容:net.ipv4.ip_forward=1退出并保存,运行改行命令。sysctl-preboot......
  • ASEMI代理长电可控硅MCR100-8特征,MCR100-8应用
    编辑-Z长电可控硅MCR100-8参数:型号:MCR100-8VDRM/VRRM:600VIT(RMS):0.8A结点温度Tj:-40~125℃储存温度Tstg:-55~150℃通态电压VTM:1.7V栅极触发电压VGT:0.8V正向或反向阻断电流峰值:10µA保持电流IH:5mA栅极触发电流IGT:15µA  MCR100-8封装规格:封装:TO-92总长度:19.2mm......
  • SEC诉Ripple案件大限将至,WEEX紧跟热点上线XRP现货币对
    WEEX唯客交易所5月17日公告,平台已正式上线XRP/USDT现货交易对,经过精心的准备和测试,即日起用户可以在WEEX平台安全、稳定的交易环境中进行XRP/USDT现货交易。据了解,此前,WEEX平台仅有XRP/USDT永续合约交易对。WEEX唯客作为一家主打合约交易的平台,现货币种并不多,目前仅有BTC、ETH、LTC......
  • python hmac_sha256 转为 java
    Javahmacsha256packagecom.example;importjava.security.InvalidKeyException;importjava.security.NoSuchAlgorithmException;importjavax.crypto.Mac;importjavax.crypto.spec.SecretKeySpec;importjavax.xml.bind.DatatypeConverter;publicclassMain......
  • linux安装并启动nacos
    前提准备下载最新稳定版本,此处以nacos-server-2.1.0.tar.gz版本为例安装下载地址:https://github.com/alibaba/nacos/releases 二、具体步骤2.1下载完成后解压:tar-zxvfnacos-server-2.1.0.tar.gz2.2将解压文件移动到/usr/local目录下mvnacosnacos-2.1.0cd/usr/local/......
  • java 多线程:synchronized 详解
    总结一个锁对象只能同时被一个线程持有,分为对象锁和类锁对象锁:每个对象都可以作为锁(几个不同的对象就是几个锁)类锁:字节码对象也能作为锁(全局唯一)同步方法不能自定义锁,只能是默认的锁(非静态:this,静态:class);同步代码块默认的锁和方法一样(非静态:this,静态:class,普通方法里面可以......