跳至頁尾內容
.NET 幫助

C# 使用指南(開發者指南)

即使您才剛開始使用 C#,您也可能已經接觸過 using 指令。如果您是 IronPDF 的使用者,您一定非常熟悉使用命名空間 using ironpdf 來開啟您的程式碼。

然而,using 關鍵字還有另一種用途。 在本指南中,我們將探討 using statement - 它是什麼、如何運作,以及如何幫助您建立更有效率的程式碼。 讓我們深入瞭解!

什麼是 C# 使用?

C# 中的 using 語句是使用實作 IDisposable 介面的資源的方便方法。 IDisposable 物件通常會保留未經管理的資源,例如檔案句柄或網路連線,當您使用完畢後需要釋放這些資源。 這就是使用說明發揮作用的地方 - 它可以幫助您確保這些資源在使用後得到妥善的處理。

Using 語句如何運作

當您使用 using 語句時,C# 會在不再需要物件時,自動呼叫物件上的 Dispose 方法。 這表示您不必手動呼叫 Dispose 方法或擔心忘記呼叫。 使用說明會幫您搞定這一點!

讓我們來看看一個簡單的範例,看看 using statement 在實際應用中是如何運作的:

using System;
using System.IO;

class Program
{
    static void Main()
    {
        // Using a using statement to ensure StreamReader is disposed of
        using (StreamReader reader = new StreamReader("example.txt"))
        {
            string content = reader.ReadToEnd();
            Console.WriteLine(content);
        }
    }
}
using System;
using System.IO;

class Program
{
    static void Main()
    {
        // Using a using statement to ensure StreamReader is disposed of
        using (StreamReader reader = new StreamReader("example.txt"))
        {
            string content = reader.ReadToEnd();
            Console.WriteLine(content);
        }
    }
}
$vbLabelText   $csharpLabel

在這個範例中,名為 reader 的 StreamReader 物件包裝在一個 using 區塊中。 當 using 區塊退出時,讀取器會自動呼叫 Dispose 方法,釋放它所保留的任何資源。

使用區塊 vs. 使用宣告。

從 C# 8.0 開始,您可以使用 using 宣告來取代 using 區塊。 using 聲明是定義一次性物件的一種更短更簡潔的方式,就像這樣:

using System;
using System.IO;

class Program
{
    static void Main()
    {
        // Using the using declaration simplifies the code
        using var reader = new StreamReader("example.txt");
        string content = reader.ReadToEnd();
        Console.WriteLine(content);
    }
}
using System;
using System.IO;

class Program
{
    static void Main()
    {
        // Using the using declaration simplifies the code
        using var reader = new StreamReader("example.txt");
        string content = reader.ReadToEnd();
        Console.WriteLine(content);
    }
}
$vbLabelText   $csharpLabel

有了 using 聲明,您就不需要大括號或縮排,讓您的程式碼更具可讀性。 當變數離開範圍時,仍會自動呼叫 Dispose 方法。

Try 區塊、Finally 區塊和 Using 語句。

您可能想知道 using 語句與 C# 中的 try 和 finally 區塊有何關聯。 那麼,using 語句實際上是 try-finally 區塊的縮寫!

以下是與之前相同的範例,但在撰寫時使用 try-finally 區塊而非 using 語句:

using System;
using System.IO;

class Program
{
    static void Main()
    {
        StreamReader reader = null;
        try
        {
            reader = new StreamReader("example.txt");
            string content = reader.ReadToEnd();
            Console.WriteLine(content);
        }
        finally\static-assets\pdf\blog\csharp-using\csharp-using-2.webp
        {
            if (reader != null)
            {
                reader.Dispose();
            }
        }
    }
}
using System;
using System.IO;

class Program
{
    static void Main()
    {
        StreamReader reader = null;
        try
        {
            reader = new StreamReader("example.txt");
            string content = reader.ReadToEnd();
            Console.WriteLine(content);
        }
        finally\static-assets\pdf\blog\csharp-using\csharp-using-2.webp
        {
            if (reader != null)
            {
                reader.Dispose();
            }
        }
    }
}
$vbLabelText   $csharpLabel

正如您所看到的,using 語句移除了 try-finally 區塊和對 Dispose 方法的明確呼叫,使代碼更乾淨、更易讀。

管理多種資源

using statement 的一大優點是可以同時處理多種資源。 您可以一個接一個堆疊 using 語句,或使用單一 using 語句來處理逗號分隔清單中的多個資源。下面的範例展示了這兩種方法:

using System;
using System.IO;

class Program
{
    static void Main()
    {
        // Stacking using statements for multiple disposable resources
        using (StreamReader reader1 = new StreamReader("example1.txt"))
        using (StreamReader reader2 = new StreamReader("example2.txt"))
        {
            string content1 = reader1.ReadToEnd();
            string content2 = reader2.ReadToEnd();
            Console.WriteLine($"Content from example1.txt:\n{content1}\nContent from example2.txt:\n{content2}");
        }

        // Attempting to use a single using statement with multiple resources (not valid)
        // Note: This method using comma-separated resources is not supported in C#
    }
}
using System;
using System.IO;

class Program
{
    static void Main()
    {
        // Stacking using statements for multiple disposable resources
        using (StreamReader reader1 = new StreamReader("example1.txt"))
        using (StreamReader reader2 = new StreamReader("example2.txt"))
        {
            string content1 = reader1.ReadToEnd();
            string content2 = reader2.ReadToEnd();
            Console.WriteLine($"Content from example1.txt:\n{content1}\nContent from example2.txt:\n{content2}");
        }

        // Attempting to use a single using statement with multiple resources (not valid)
        // Note: This method using comma-separated resources is not supported in C#
    }
}
$vbLabelText   $csharpLabel

注意:C# 不支援單一 using 語句包含多個以逗號分隔的資源。 每個資源都需要有自己的使用說明。

實作 IDisposable 介面

有時候,您可能會建立自己的自訂類別來管理一個或多個資源。 如果您的類別負責處理一次性物件或非管理資源,您應該實作 IDisposable 介面。

以下是一個實作 IDisposable 介面的自訂類別範例:

using System;
using System.IO;

public class CustomResource : IDisposable
{
    private StreamReader _reader;

    public CustomResource(string filePath)
    {
        _reader = new StreamReader(filePath);
    }

    public void ReadContent()
    {
        string content = _reader.ReadToEnd();
        Console.WriteLine(content);
    }

    public void Dispose()
    {
        if (_reader != null)
        {
            _reader.Dispose();
            _reader = null;
        }
    }
}
using System;
using System.IO;

public class CustomResource : IDisposable
{
    private StreamReader _reader;

    public CustomResource(string filePath)
    {
        _reader = new StreamReader(filePath);
    }

    public void ReadContent()
    {
        string content = _reader.ReadToEnd();
        Console.WriteLine(content);
    }

    public void Dispose()
    {
        if (_reader != null)
        {
            _reader.Dispose();
            _reader = null;
        }
    }
}
$vbLabelText   $csharpLabel

在這個範例中,CustomResource 類別管理一個 StreamReader 物件,這是一個一次性的物件。 透過實作 IDisposable 介面並實作 Dispose 方法,我們可以對這個類別的實體使用 using 語句。

以下是您如何在 CustomResource 類中使用 using 語句:

class Program
{
    static void Main()
    {
        using (CustomResource resource = new CustomResource("example.txt"))
        {
            resource.ReadContent();
        }
    }
}
class Program
{
    static void Main()
    {
        using (CustomResource resource = new CustomResource("example.txt"))
        {
            resource.ReadContent();
        }
    }
}
$vbLabelText   $csharpLabel

當 using 區塊結束時,Dispose 方法將會被呼叫,處置它所管理的 StreamReader 物件。

使用 Using 語句處理異常。

using statement 的另一個好處是有助於更優雅地處理異常。 如果在 using 區塊中發生異常,仍會在資源上呼叫 Dispose 方法,以確保適當的清理。

例如,請考慮以下程式碼:

using System;
using System.IO;

class Program
{
    static void Main()
    {
        try
        {
            using (StreamReader reader = new StreamReader("nonexistentfile.txt"))
            {
                string content = reader.ReadToEnd();
                Console.WriteLine(content);
            }
        }
        catch (FileNotFoundException ex)
        {
            Console.WriteLine($"Error: {ex.Message}");
        }
    }
}
using System;
using System.IO;

class Program
{
    static void Main()
    {
        try
        {
            using (StreamReader reader = new StreamReader("nonexistentfile.txt"))
            {
                string content = reader.ReadToEnd();
                Console.WriteLine(content);
            }
        }
        catch (FileNotFoundException ex)
        {
            Console.WriteLine($"Error: {ex.Message}");
        }
    }
}
$vbLabelText   $csharpLabel

在這種情況下,如果程式碼發生 FileNotFoundException,該異常會被 catch 區塊捕獲並處理。 即使異常發生在 using 區塊中,仍會在 StreamReader 物件上呼叫 Dispose 方法,以確保沒有資源外洩。

使用 IronPDF 和 Using Statement

IronPDF 是一種常用的函式庫,用於在 C# 和 .NET 應用程式中建立、編輯和提取 PDF 檔案。 與其他使用資源的函式庫一樣,IronPDF 也可以從 using statement 中獲益,以確保資源管理得宜。

讓我們來探討如何在 IronPDF 中使用 using 語句,從 HTML 字串建立 PDF 文件,展現 using 語句在實際情境中的威力。

首先,確保您已在專案中安裝 IronPDF NuGet 套件:

Install-Package IronPdf

現在,讓我們從 PDF 檔案中擷取所有資料:

using IronPdf;

class Program
{
    static void Main()
    {
        // Using a using statement with IronPDF to ensure resources are managed
        using (PdfDocument pdfDocument = PdfDocument.FromFile("PDFData.pdf"))
        {
            string extractedText = pdfDocument.ExtractAllText();
            Console.WriteLine(extractedText);
        }
    }
}
using IronPdf;

class Program
{
    static void Main()
    {
        // Using a using statement with IronPDF to ensure resources are managed
        using (PdfDocument pdfDocument = PdfDocument.FromFile("PDFData.pdf"))
        {
            string extractedText = pdfDocument.ExtractAllText();
            Console.WriteLine(extractedText);
        }
    }
}
$vbLabelText   $csharpLabel

在此程式碼中,我們使用 PdfDocument.FromFile 方法開啟一個名為"PDFData.pdf"的 PDF 檔案。 這個方法會返回一個 PdfDocument 範例,我們將它包裝在一個 using 語句中。

在 using 區塊中,我們在 PdfDocument 實例上呼叫 ExtractAllText 以從 PDF 中提取所有文字。 當 using 區塊退出時,Dispose 方法會自動在 PdfDocument 上呼叫,釋放它所持有的任何資源。

透過在 PdfDocument 中使用 using 語句,我們可以確保在完成從 PDF 檔案中擷取文字之後,即使在過程中發生異常,也能正確關閉 PDF 檔案。 這是一個很好的例子,說明 using 語句如何在 C# 中協助有效管理資源。

!a href="/static-assets/pdf/blog/csharp-using/csharp-using-1.webp">C# Using Statement

包裝。

以上就是使用說明的簡介! 我們已經看到它如何確保有效處理一次性物件,無縫管理一個或多個資源。 using statement 不僅有助於保持程式碼的整潔,還能增強 C# 專案的可讀性。

我們還介紹了 IronPDF,這是一個用於在 C# 中操作 PDF 的強大程式庫。 結合 IronPDF 使用 using statement 展示此代碼功能的實際應用,強化概念及其重要性。

準備好使用 IronPdf 了嗎? 您可以從我們的 30天免費試用 IronPDF 和 Iron Software's Suite 開始。 它還可以完全免費用於開發目的,讓您真正能一窺其真面目。 如果您喜歡您所看到的,IronPdf 的起始價格低至 $799 的授權選項。 若想節省更多的費用,請查看 Iron Suite 完整軟體套件,您可以用兩個套件的價格獲得全部九個 Iron Software 工具。 祝您編碼愉快!

IronPDF 使用說明

常見問題解答

C# 中 using 語句的用途是什麼?

C# 中的 using 語句用於管理實作IDisposable介面的資源,例如檔案句柄或網路連接,確保在使用後正確釋放它們。

C# 中的 using 語句如何幫助防止資源洩漏?

using 語句會在物件不再需要時自動呼叫Dispose方法,這有助於防止資源洩漏,確保即使發生異常也能釋放資源。

C# 中的 using 程式碼區塊和 using 宣告有什麼不同?

using 程式碼區塊將程式碼以花括號括起來,並確保在程式碼區塊結束時進行資源釋放;而 C# 8.0 中引入的 using 聲明則更加簡潔,並且會在資源超出作用域時自動釋放資源。

如何在我的自訂 C# 類別中實作 IDisposable 介面?

若要在自訂類別中實作IDisposable ,請定義一個Dispose方法來釋放非託管資源,從而允許使用 using 語句進行自動資源管理。

C# 中的 using 語句可以處理多個資源嗎?

是的,您可以透過堆疊多個 using 語句來管理多個資源,但不支援使用逗號分隔的單一 using 語句來管理多個資源。

為什麼在 C# 中最好使用 using 語句而不是 try-finally 區塊?

using 語句因其更簡潔的語法和自動資源管理功能而更受青睞,與手動實現 try-finally 區塊以確保資源釋放相比,它簡化了程式碼。

如何在C#中有效管理PDF文件?

您可以使用 IronPDF 有效地管理 PDF 文檔,它與 using 語句集成,以確保在文字擷取等作業後正確關閉文檔實例等資源。

是否有可供 C# 開發的 PDF 庫試用版?

是的,某些 PDF 庫提供 30 天免費試用期,可免費用於開發目的,讓您在購買前探索其功能。

Jacob Mellor,Team Iron 首席技術官
首席技術長

Jacob Mellor 是 Iron Software 的首席技術官,也是一位富有遠見的工程師,率先開發了 C# PDF 技術。作為 Iron Software 核心程式碼庫的最初開發者,他自公司成立之初便參與塑造了其產品架構,並與執行長 Cameron Rimington 一起將其發展成為一家擁有 50 多名員工、服務於 NASA、特斯拉和全球政府機構的公司。

Jacob 於 1998 年至 2001 年在曼徹斯特大學獲得土木工程一級榮譽學士學位。 1999 年,他在倫敦創辦了自己的第一家軟體公司;2005 年,他創建了自己的第一個 .NET 元件。此後,他專注於解決微軟生態系統中的複雜問題。

他的旗艦產品 IronPDF 和 IronSuite .NET 庫在全球 NuGet 上的安裝量已超過 3000 萬次,其基礎程式碼持續為全球開發者工具提供支援。憑藉 25 年的商業經驗和 41 年的程式設計專長,Jacob 始終致力於推動企業級 C#、Java 和 Python PDF 技術的創新,同時指導下一代技術領導者。