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塊中進行處理。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/167578.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/167578.shtml
英文地址,請注明出處:http://en.pswp.cn/news/167578.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

正則表達式(Java)(韓順平筆記)

正則表達式(Java) 底層實現 package com.hspedu.RegExp;import java.util.regex.Matcher; import java.util.regex.Pattern;public class RegExp00 {public static void main(String[] args) {String content "1998年12月8日,第二代J…

【Promise】某個異步方法執行結束后 在執行下面方法

使用Promise ,當 layer.msg(查詢成功) 這個方法執行結束后 ,下面代碼才會執行 let thas this async function showMessage() {await new Promise(resolve > layer.msg(查詢成功, resolve));// 這里的代碼將在 layer.msg 執行結束后執行thas.isGuaran…

數字圖像處理(實踐篇)一 將圖像中的指定目標用bBox框起來吧!

目錄 一 實現方法 二 涉及的OpenCV函數 三 代碼 四 效果圖 一 實現方法 ①利用OTSU方法將前景與背景分割。 ②使用連通區域分析可以將具有相同像素值且位置相鄰的前景像素點組成的圖像區域識別。 ③畫bbox。 ④顯示結果。 二 涉及的OpenCV函數 ① OpenCV提供了cv2.th…

如何安裝和配置代理服務器squid?

安裝和配置Squid代理服務器通常需要幾個步驟。以下是在Ubuntu上安裝和配置Squid的簡單步驟: 步驟 1: 安裝Squid 打開終端,并使用以下命令安裝Squid: sudo apt update sudo apt install squid步驟 2: 配置Squid 默認配置文件位于 /etc/squ…

convertRect:toView 方法注意事項

這是在網上找到的一張圖 我們開發中有時候會用到左邊轉換,convertRect:toView 通常情況下,我們回這樣使用 CGRect newRect [a convertRect:originframe toView:c];其中newRect和 originframe的size相同,只改變origin newRect.origin a…

系統優化軟件Bitsum Process Lasso Pro v12.4,供大家學習研究參考

1、自動或手動調整進程優先級;將不需要抑制的進程添加到排除列表; 2、設置動態提升前臺運行的進程/線程的優先級 3、設置進程黑名單,禁止無用進程(機制為啟動即結束,而非攔截其啟動)。 4、優化I/O優先級以及電源模式自動化。 5、ProBalance功能。翻譯成中文是“進程平衡…

STM32入門--CAN

目錄 一、bxCan簡介 二、bxCAN總體描述 2.1概述 2.2CAN框圖 三、bxCA的工作模式 3.1初始化模式 3.2正常模式 3.3睡眠模式(低功耗) 四、測試模式 4.1靜默模式 4.2環回模式 五、bxCAN功能描述 5.1 發送處理 ?編輯 5.2接收管理 5.2.1 標識符過…

HTTP協議抓包工具Charles 抓包圖文完整教程

Charles是在您自己的計算機上運行的Web代理(HTTP代理 / HTTP監視器),您的網絡瀏覽器(或任何其他Internet應用程序)配置為通過Charles訪問Internet,Charles可以為您記錄并顯示發送和接收的所有數據。 Http抓…

[tsai.shen@mailfence.com].faust勒索病毒數據怎么處理|數據解密恢復

導言: [support2022cock.li].faust、[tsai.shenmailfence.com].faust、[Encrypteddmailfence.com].faust勒索病毒是一種具有惡意目的的勒索軟件,其主要特點包括對受害者文件進行強力加密,然后勒索受害者支付贖金以獲取解密密鑰。攻擊者通常通…

Centos8部署MySQL主從復制報錯問題

問題1.在部署MySQL主從復制時,創建用戶提示ERROR 1819:Your password does not satisfy the current policy requirements。即為當前配置的密碼,不符合策略要求。 問題1解決方式: set global validate_password.policyLOW; \\…

Leetcode—1410.HTML實體解析器【中等】

2023每日刷題(三十八) Leetcode—1410.HTML實體解析器 算法思想 實現代碼 typedef struct entityChar {char* entity;char rechar; }entity;entity matches[] {{""", "},{"'", \},{"&"…

NLP中 大語言模型LLM中的思維鏈 Chain-of-Thought(CoT) GoT

文章目錄 介紹思路CoT方法Few-shot CoTCoT Prompt設計CoT投票式CoT-自洽性(Self-consistency)使用復雜的CoT自動構建CoTCoT中示例順序的影響Zero-shot CoT 零樣本思維鏈 GoT,Graph of Thoughts總結 介紹 在過去幾年的探索中,業界發現了一個現…

C語言之strstr函數的使用和模擬實現

C語言之strstr函數的模擬實現 文章目錄 C語言之strstr函數的模擬實現1. strstr函數的介紹2. strstr函數的使用3. strstr的模擬實現3.1 實現思路3.2 實現代碼 1. strstr函數的介紹 函數聲明如下: char * strstr ( const char * str1, const char * str2 ); strs…

怎樣自動把網頁截圖發到微信群里

現在很多公司都在使用企業微信了,不但方便公司內部交流和客戶交流,還能組建各種小組群,業務群。企業微信群提供一個機器人的功能,方便我們把公司業務信息,或來自外部的信息自動發布到群里。 這里研究一下如何向微信群…

大數據-之LibrA數據庫系統告警處理(ALM-37003 GTM主備不同步或者GTM主備斷連)

告警解釋 當GTM主實例與GTM備實例連接異常或者GTM主實例未處于同步狀態時,產生該告警。 告警屬性 告警ID 告警級別 可自動清除 37003 嚴重 是 告警參數 參數名稱 參數含義 ServiceName 產生告警的服務名稱 RoleName 產生告警的角色名稱 HostName 產…

基于OpenCV+MediaPipe的手勢識別

【精選】【優秀課設】基于OpenCVMediaPipe的手勢識別(數字、石頭剪刀布等手勢識別)_石頭剪刀布opencv識別代碼_網易獨家音樂人Mike Zhou的博客-CSDN博客 import cv2 import mediapipe as mp import mathdef vector_2d_angle(v1, v2):求解二維向量的角度v…

HIVE SQL 判斷空值函數

目錄 nvl()coalesce() nvl() select nvl(null,2);輸出:2 select nvl(,2);輸出:‘’ coalesce() select coalesce(null,2);輸出:2 select coalesce(,2);輸出:‘’ select coalesce(null,null,2);輸出:2 *coalesc…

Maxwell安裝部署消費到kafka集群

1.上傳安裝包到linux系統上面 2.解壓安裝包到安裝目錄下,并且重命名 [rootVM-4-10-centos package]# tar -zxvf maxwell-1.29.2.tar.gz -C /opt/software/3.配置mysql 增加以下配置 #數據庫id server-id 1 #啟動binlog,該參數的值會作為binlog的文件…

分布式鎖詳解

文章目錄 分布式鎖1. [傳統鎖回顧](https://blog.csdn.net/qq_45525848/article/details/134608044?csdn_share_tail%7B%22type%22:%22blog%22,%22rType%22:%22article%22,%22rId%22:%22134608044%22,%22source%22:%22qq_45525848%22%7D)1.1. 從減庫存聊起1.2. 環境準備1.3. 簡…

leetcode每日一題32

82.刪除排序鏈表中的重復元素 主要問題是沒有頭節點,以及要刪除所有的相等元素,不是留下一個 那么首先要建立一個頭節點,指向head 而且指針要始終指向要刪除的節點的前一個節點 ListNode* pre new ListNode(0,head);在搜索的過程中&#x…