当前位置: 首页 > news >正文

C# 中using关键字的使用

在C#中我们还是很有必要掌握using关键字的。

比如这样:

string path = “D:\data.txt”;
if (!File.Exists(path ))
{File.Create(path);                       File.WriteAllText(path,"OK");                                         
}

首先我创建一个文件,然后就写数据入文件中,逻辑看起来没错,但是运行起来,就报错了:IOException: The process cannot access the file 'D:\data.txt' because it is being used by another process.

提示进程正被占用。毫无疑问是我们创建了文件,但是没有释放资源,程序就判断你的资源被占用了。

不懂用using关键字的就感觉比较麻烦了,但是通过使用using,轻松解决。

string path = “D:\data.txt”;
if (!File.Exists(path ))
{using(File.Create(path)){File.WriteAllText(path,"OK");}                  }

事实上using还是有不少用处的。

1、首先是上面案例:它可以管理资源,它会自动释放实现了IDisposable接口的对象,这样可以确保在使用完对象后,及时释放相关资源,避免内存泄漏。事实上,它除了处理一个资源外,它还可以同时处理多个资源,通过逗号分开就行,例如:

using (var stream = new FileStream("file.txt", FileMode.Open))
{// 使用stream对象进行文件操作// 在代码块结束时,stream会自动调用Dispose()方法释放资源
}using (var stream1 = new FileStream("file1.txt", FileMode.Open),stream2 = new FileStream("file2.txt", FileMode.Open))
{// 使用stream1和stream2进行文件操作// 在代码块结束时,两个流对象的资源会被自动释放
}

2、引入命名空间:这个就比较常见了。如:

using System;
using System.IO;namespace MyNamespace
{class MyClass{static void Main(){// 可以直接使用Console和File类,而无需写成System.Console和System.IO.FileConsole.WriteLine("Hello, world!");File.WriteAllText("file.txt", "Hello!");}}
}

3、可以使用using static导入静态类的成员。

using static MyNamespace.MathHelper;namespace MyNamespace
{static class MathHelper{public static int Add(int a, int b){return a + b;}}class MyClass{static void Main(){int result = Add(3, 4); // 直接使用Add方法,无需写成MathHelper.Add}}
}

4、使用别名来简化长命名空间的使用。

比如我觉得System.IO这个命名空间有点长,那么我使用using SysIO = System.IO代替它。

5、自定义类型的资源管理.:当我们编写的自定义类型需要进行资源管理,就可以通过实现IDisposable接口,并在Dispose方法中释放相关资源。这样该自定义类型就可以像标准类型一样使用using语句块进行资源管理。如自定义类:

public class MyResource : IDisposable
{private bool disposed = false;// 实现IDisposable接口的Dispose方法public void Dispose(){Dispose(true);GC.SuppressFinalize(this);}protected virtual void Dispose(bool disposing){if (!disposed){if (disposing){// 释放托管资源}// 释放非托管资源disposed = true;}}// 如果有非托管资源,还可以实现析构函数(Finalize方法)~MyResource(){Dispose(false);}
}

使用:

using (var resource = new MyResource())
{// 使用resource对象// 在代码块结束时,resource对象的资源会被自动释放
}

6、除此意外,我们还可以结合try~catch语句,捕捉异常。如:

try
{using (var resource = new MyResource()){// 使用resource对象// 可能会抛出异常}
}
catch (Exception ex)
{// 处理异常
}

上面案例中,当发生异常时using语句块会自动调用Dispose方法释放资源,然后异常会被捕获然后在catch块中进行处理。

相关文章:

C# 中using关键字的使用

在C#中我们还是很有必要掌握using关键字的。 比如这样: string path “D:\data.txt”; if (!File.Exists(path )) {File.Create(path); File.WriteAllText(path,"OK"); } 首先我创建…...

16 redis高可用读写分离方案

在前面说的JedisSentinelPool只能实现主从的切换&#xff0c;而无法实现读写的分离。 1.哨兵的客户端实现主从切换方案 <dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</arti…...

Nginx模块开发之http handler实现流量统计(2)

文章目录 一、概述二、Nginx handler模块开发2.1、代码实现2.2、编写config文件2.3、编译模块到Nginx源码中2.4、修改conf文件2.5、执行效果 总结 一、概述 上一篇【Nginx模块开发之http handler实现流量统计&#xff08;1&#xff09;】使用数组在单进程实现了IP的流量统计&a…...

案例012:Java+SSM+uniapp基于微信小程序的科创微应用平台设计与实现

文末获取源码 开发语言&#xff1a;Java 框架&#xff1a;SSM JDK版本&#xff1a;JDK1.8 数据库&#xff1a;mysql 5.7 开发软件&#xff1a;eclipse/myeclipse/idea Maven包&#xff1a;Maven3.5.4 小程序框架&#xff1a;uniapp 小程序开发软件&#xff1a;HBuilder X 小程序…...

vue3+elementPlus登录向后端服务器发起数据请求Ajax

后端的url登录接口 先修改main.js文件 // 导入Ajax 前后端数据传输 import axios from "axios"; const app createApp(App) //vue3.0使用app.config.globalProperties.$http app.config.globalProperties.$http axios app.mount(#app); login.vue 页面显示部分…...

存储区域

将应用程序加载到内存空间执行时&#xff0c;操作系统负责代码段、数据段和BSS段的加载&#xff0c;并在内存中为这些段分配空间。 栈段亦由操作系统分配和管理&#xff0c;而不需要程序员显示地管理&#xff1b;堆段由程序员自己管理&#xff0c;即显示地申请和释放空间。 进…...

C#串口通信从入门到精通(27)——高速通信下解决数据处理慢的问题(20ms以内)

前言 我们在开发串口通信程序时,有时候会遇到比如单片机或者传感器发送的数据速度特别快,比如10ms、20ms发送一次,并且每次发送的数据量还比较大,如果按照常规的写法,我们会发现接收的数据还没处理完,新的数据又发送过来了,这就会导致处理数据滞后,软件始终处理的不是…...

Redis-Redis高可用集群之水平扩展

Redis3.0以后的版本虽然有了集群功能&#xff0c;提供了比之前版本的哨兵模式更高的性能与可用性&#xff0c;但是集群的水平扩展却比较麻烦&#xff0c;今天就来带大家看看redis高可用集群如何做水平扩展&#xff0c;原始集群(见下图)由6个节点组成&#xff0c;6个节点分布在三…...

2023全球数字贸易创新大赛-人工智能元宇宙-4-10

目录 竞赛感悟: 创业的话 好的项目 数字工厂,智慧制造:集群控制的安全问题...

go defer用法_类似与python_java_finially

defer 执行 时间 defer 一般 定义在 函数 开头, 但是 他会 最后 被执行 A defer statement defers the execution of a function until the surrounding function returns. 如果说 为什么 不在 末尾 定义 defer 呢, 因为 当 错误 发生时, 程序 执行 不到 末尾 就会 崩溃. d…...

Log4j2.xml不生效:WARN StatusLogger Multiple logging implementations found:

背景 将 -Dlog4j.debug 添加到IDEA的类的启动配置中 运行上图代码&#xff0c;这里log4j2.xml控制的日志级别是info&#xff0c;很明显是没生效。 DEBUG StatusLogger org.slf4j.helpers.Log4jLoggerFactory is not on classpath. Good! DEBUG StatusLogger Using Shutdow…...

【LeetCode】挑战100天 Day14(热题+面试经典150题)

【LeetCode】挑战100天 Day14&#xff08;热题面试经典150题&#xff09; 一、LeetCode介绍二、LeetCode 热题 HOT 100-162.1 题目2.2 题解 三、面试经典 150 题-163.1 题目3.2 题解 一、LeetCode介绍 LeetCode是一个在线编程网站&#xff0c;提供各种算法和数据结构的题目&…...

VMware安装windows操作系统

一、下载镜像包 地址&#xff1a;镜像包地址。 找到需要的版本下载镜像包。 二、安装 打开VMware新建虚拟机&#xff0c;选择用镜像文件。将下载的镜像包加载进去即可。...

历时半年,我发布了一款习惯打卡小程序

半年多前&#xff0c;我一直困扰于如何记录习惯打卡情况&#xff0c;在参考了市面上绝大多数的习惯培养程序后&#xff0c;终于创建并发布了这款习惯打卡小程序。 “我的小日常打卡”小程序主要提供习惯打卡和专注训练功能。致力于培养用户养成一个个好的习惯&#xff0c;改掉…...

被DDOS了怎么办 要如何应对

DDoS攻击的特点和类型 1. 特点 DDoS攻击的特点是通过大量合法的请求或者无效的请求&#xff0c;消耗目标服务器的网络带宽和系统资源&#xff0c;使其无法正常运行。攻击者通常使用多个主机发起攻击&#xff0c;以达到更高的攻击效果。 2. 常见类型 &#xff08;1&#xff09;S…...

时间序列预测实战(十七)PyTorch实现LSTM-GRU模型长期预测并可视化结果(附代码+数据集+详细讲解)

一、本文介绍 本文给大家带来的实战内容是利用PyTorch实现LSTM-GRU模型&#xff0c;LSTM和GRU都分别是RNN中最常用Cell之一&#xff0c;也都是时间序列预测中最常见的结构单元之一&#xff0c;本文的内容将会从实战的角度带你分析LSTM和GRU的机制和效果&#xff0c;同时如果你…...

【免费使用】基于PaddleSeg开源项目开发的人像抠图Web API接口

基于PaddleSeg开源项目开发的人像抠图API接口&#xff0c;服务器不存储照片大家可放心使用。 1、请求接口 请求地址&#xff1a;http://apiseg.hysys.cn/predict_img 请求方式&#xff1a;POST 请求参数&#xff1a;{"image":"/9j/4AAQ..."} 参数是jso…...

Centos7 Python环境和yum修复

1、删除现有残余包 [rootlocalhost ]# rpm -qa|grep python|xargs rpm -ev --allmatches --nodeps[rootlocalhost ]# rpm -qa|grep yum|xargs rpm -ev --allmatches --nodeps[rootlocalhost ]# whereis python |xargs rm -frv[rootlocalhost ]# whereis python ##验证清除&…...

Ubuntu下使用protoBuf

一、protobuf简介&#xff1a; 1.1 protobuf的定义&#xff1a; protobuf是用来干嘛的&#xff1f; protobuf是一种用于 对结构数据进行序列化的工具&#xff0c;从而实现 数据存储和交换。 &#xff08;主要用于网络通信中 收发两端进行消息交互。所谓的“结构数据”是指类…...

AT89S52单片机

目录 一.AT89S52单片机的硬件组成 1.CPU(微处理器) (1)运算器 (2)控制器 2.数据存储器 (RAM) (1)片内数据存储器 (2)片外数据存储器 3.程序存储器(Flash ROM) 4.定时器/计数器 5.中断系统 6.串行口 7.P0口、P1口、P2口和P3口 8.特殊功能寄存器 (SFR) 常用的特殊功…...

专业级DOCX转LaTeX终极指南:docx2tex的完整高效解决方案

专业级DOCX转LaTeX终极指南&#xff1a;docx2tex的完整高效解决方案 【免费下载链接】docx2tex Converts Microsoft Word docx to LaTeX 项目地址: https://gitcode.com/gh_mirrors/do/docx2tex 在学术写作和技术文档创作中&#xff0c;Microsoft Word和LaTeX代表了两种…...

MySQL/PostgreSQL表设计实战:从‘反范式’的坑里,聊聊什么时候该遵守3NF

MySQL/PostgreSQL表设计实战&#xff1a;范式与反范式的工程权衡 在电商系统开发中&#xff0c;我们团队曾遇到一个经典难题&#xff1a;订单详情页加载需要关联7张表&#xff0c;即使优化索引后响应时间仍超过800ms。当我们将部分商品信息冗余到订单表后&#xff0c;查询性能直…...

BrowserMob Proxy快速入门:5分钟搭建HTTP代理服务器

BrowserMob Proxy快速入门&#xff1a;5分钟搭建HTTP代理服务器 【免费下载链接】browsermob-proxy A free utility to help web developers watch and manipulate network traffic from their AJAX applications. 项目地址: https://gitcode.com/gh_mirrors/br/browsermob-p…...

别再只用cv2.split了!用NumPy切片拆分OpenCV图像通道,速度更快还省内存

别再只用cv2.split了&#xff01;用NumPy切片拆分OpenCV图像通道&#xff0c;速度更快还省内存 在图像处理领域&#xff0c;通道拆分是最基础却高频的操作之一。许多开发者习惯性地使用cv2.split()&#xff0c;却不知道这个看似简单的操作背后隐藏着性能陷阱。当处理高分辨率图…...

思源黑体TTF构建工具:从零到一打造专业多语言字体家族

思源黑体TTF构建工具&#xff1a;从零到一打造专业多语言字体家族 【免费下载链接】source-han-sans-ttf A (hinted!) version of Source Han Sans 项目地址: https://gitcode.com/gh_mirrors/so/source-han-sans-ttf 思源黑体TTF构建工具是一个专业级的字体构建系统&am…...

为什么 AI 生图又回到了聊天入口:ChatGPT Images 2 之后,普通人的工作流怎么变

这轮 AI 生图的变化&#xff0c;如果只盯着“效果是不是更好了”&#xff0c;其实很容易把重点看窄。对多数普通用户来说&#xff0c;真正影响使用习惯的地方&#xff0c;不是单张图的观感&#xff0c;而是聊天入口重新开始接住前后的连续动作。ChatGPT Images 2.0 这类更新放出…...

AI辅助编程提升代码质量的实践指南

1. 代码质量提升的AI实践指南在程序员群体里有个心照不宣的事实&#xff1a;我们80%的工作时间都在和前人写的烂代码搏斗——其中有不少还是自己三个月前写的。代码质量就像房间里的空气&#xff0c;平时没人注意&#xff0c;一旦出问题所有人都要窒息。最近两年&#xff0c;AI…...

VS Code 调试 Go 程序时让 stdin 可输入(实战指南)

在 VS Code 调试 Go 程序时让 stdin 可输入&#xff08;实战指南&#xff09;适用于&#xff1a;在 VS Code 中使用 Go 扩展 delve 调试器&#xff08;Windows / macOS / Linux&#xff09;。本文以 Windows PowerShell 为例。目录 问题描述原因分析解决方案&#xff08;快速…...

四足机器人无传感器地形稳定性检测技术解析

1. 四足机器人坍塌地形运动规划技术解析在灾难救援和行星探测等高风险场景中&#xff0c;四足机器人常面临地表突然坍塌的致命威胁。传统解决方案通常依赖两类技术路线&#xff1a;一类是通过立体视觉或激光雷达构建地形高程图&#xff0c;但这种方法只能识别表面几何特征&…...

从DICOM标签到三维重建:手把手教你用Python解析医学影像的隐藏信息

从DICOM标签到三维重建&#xff1a;手把手教你用Python解析医学影像的隐藏信息 在放射科医生的日常工作中&#xff0c;DICOM文件就像一本充满秘密的日记——表面上看是张黑白图像&#xff0c;但隐藏在头文件中的数百个标签&#xff08;Tag&#xff09;才是真正的宝藏。想象一下…...