.NET幫助 C# 初始化關鍵字 (如何為開發人員運作) Jacob Mellor 更新:2025年7月28日 下載 IronPDF NuGet 下載 DLL 下載 Windows Installer 開始免費試用 LLM副本 LLM副本 將頁面複製為 Markdown 格式,用於 LLMs 在 ChatGPT 中打開 請向 ChatGPT 諮詢此頁面 在雙子座打開 請向 Gemini 詢問此頁面 在 Grok 中打開 向 Grok 詢問此頁面 打開困惑 向 Perplexity 詢問有關此頁面的信息 分享 在 Facebook 上分享 分享到 X(Twitter) 在 LinkedIn 上分享 複製連結 電子郵件文章 C# 9.0 中的init 關鍵字引入了一種定義類別屬性以建立不可變物件的新方法。 在早期版本的 C# 中,屬性通常與 get 和 set 存取器一起使用,用於讀取和寫入物件欄位。 但是,使用 init 方法,您可以僅在物件初始化期間將屬性設為可寫,之後將其設為唯讀。 本教學將透過IronPDF庫的實際範例和場景,探討如何使用C# init關鍵字。 你還將了解傳統屬性設定器(set)和新的僅初始化設定器之間的關鍵差異。 Init 關鍵字的基本範例 讓我們從一個簡單的例子開始: public class Person { public string FirstName { get; init; } public string LastName { get; init; } } var person = new Person { FirstName = "Iron", LastName = "Dev" }; // person.FirstName = "Jane"; // This will give a compile-time error. public class Person { public string FirstName { get; init; } public string LastName { get; init; } } var person = new Person { FirstName = "Iron", LastName = "Dev" }; // person.FirstName = "Jane"; // This will give a compile-time error. $vbLabelText $csharpLabel 在這個例子中,FirstName 和 LastName 被標記為僅初始化屬性。 這意味著它們只能在物件初始化期間賦值。 物件建立後,嘗試變更其值會導致編譯時錯誤。 為什麼要使用 init 關鍵字? 使用 init 關鍵字的主要原因是使物件屬性在初始化後不可變。 傳統上,你可以將屬性標記為唯讀以實現不可變性。 但是,通常需要一個建構函式來接受設定欄位所需的所有值,這可能會導致建構函式出現大量樣板程式碼。 使用 init,您可以使用物件初始化器實現相同的目標,而無需編寫冗長的建構函數。 public class Person { public string FirstName { get; init; } public string LastName { get; init; } // Without using constructor boilerplate for property initialization } var person = new Person { FirstName = "John", LastName = "Doe" }; public class Person { public string FirstName { get; init; } public string LastName { get; init; } // Without using constructor boilerplate for property initialization } var person = new Person { FirstName = "John", LastName = "Doe" }; $vbLabelText $csharpLabel 使用僅初始化屬性進行物件初始化 使用 init 可以與物件初始化器無縫協作。 與其依賴建構函式來設定值,不如在建立物件時直接定義所需的屬性。 public class Point { public int X { get; init; } public int Y { get; init; } } var point = new Point { X = 10, Y = 20 }; // point.X = 30; // This will throw a compile-time error public class Point { public int X { get; init; } public int Y { get; init; } } var point = new Point { X = 10, Y = 20 }; // point.X = 30; // This will throw a compile-time error $vbLabelText $csharpLabel 這將建立一個簡單的、不可變的 Point 類型的物件。 請注意,X 和 Y 的值在初始化時設置,以後無法修改。 將初始化與建構函式混合使用 雖然 init 的主要用途是透過物件初始化器進行物件初始化,但如果需要,您仍然可以使用建構函式。 在物件建立過程中強制執行特定屬性值時,這尤其有用。 public class Person { public string FirstName { get; init; } public string LastName { get; init; } public Person(string firstName, string lastName) { FirstName = firstName; LastName = lastName; } } public class Person { public string FirstName { get; init; } public string LastName { get; init; } public Person(string firstName, string lastName) { FirstName = firstName; LastName = lastName; } } $vbLabelText $csharpLabel 你可以同時使用建構子和初始化屬性。 這種方法提供了更大的靈活性,同時在物件建構後仍能保證其不可變性。 初始化相對於私有集合的優勢 以前,開發人員使用私有集合存取器來限制類別外部的屬性修改。 public class Person { public string FirstName { get; private set; } public string LastName { get; private set; } public Person(string firstName, string lastName) { FirstName = firstName; LastName = lastName; } } public class Person { public string FirstName { get; private set; } public string LastName { get; private set; } public Person(string firstName, string lastName) { FirstName = firstName; LastName = lastName; } } $vbLabelText $csharpLabel 雖然這種方法可行,但它需要建構函數樣板程式碼來初始化屬性。 此外,它還允許類別本身稍後修改屬性,這對於不可變物件來說並不總是理想的。 init 關鍵字可以解決這個問題,因為它只允許在物件建立時進行初始化,並阻止之後的任何修改。 處理只讀欄位和初始化存取器的初始化 init 關鍵字可以在物件建立期間初始化欄位或屬性,之後它們將保持不可變狀態。 雖然唯讀欄位提供了不可變性,但 init 存取器為屬性提供了類似的功能。 您可以透過兩種方式處理不可變性:使用唯讀欄位和初始化屬性。 使用建構函數定義唯讀字段 在這個例子中,我們使用唯讀欄位 firstName 和 lastName,這些欄位是在物件建構期間設定的。 這些欄位只能在建構函式中賦值一次,之後不能修改: public class Person { private readonly string firstName; private readonly string lastName; public string FirstName => firstName; public string LastName => lastName; public Person(string firstName, string lastName) { this.firstName = firstName; this.lastName = lastName; } } public class Person { private readonly string firstName; private readonly string lastName; public string FirstName => firstName; public string LastName => lastName; public Person(string firstName, string lastName) { this.firstName = firstName; this.lastName = lastName; } } $vbLabelText $csharpLabel 使用初始化存取器進行初始化 或者,我們可以使用 init 存取器建立唯讀屬性,這些屬性可以在物件建立期間初始化,但之後不能變更。 這樣就無需使用唯讀字段,並提供了一種更現代的語法: public class Person { public string FirstName { get; init; } public string LastName { get; init; } } public class Person { public string FirstName { get; init; } public string LastName { get; init; } } $vbLabelText $csharpLabel IronPDF簡介 IronPDF是一個功能強大的 PDF 生成和處理庫,專為 C# 開發人員設計。 它透過將 HTML、CSS、圖像和其他內容轉換為 PDF 文檔,簡化了 PDF 的操作。 IronPDF具有像素級完美渲染、跨平台支援以及輕鬆整合到.NET專案中等功能,是需要快速建立高品質 PDF 的開發人員的理想選擇。 您可以將其與.NET Core、.NET Framework 和 .NET Standard 一起使用,並且它支援包括 Windows、Linux 和 macOS 在內的多種平台。 案例:將IronPDF與 C# Init 關鍵字結合使用 要在 C# 專案中產生 PDF 時建立不可變對象,可以將 init 關鍵字與IronPDF結合使用。 init 關鍵字確保物件在初始化後保持完整性,而IronPDF處理資料並基於此不可變模型產生 PDF。 請確保在您的專案中正確引用了IronPDF 。 您可以透過NuGet安裝它: Install-Package IronPdf 以下是程式碼範例: using IronPdf; public class Person { public int Id { get; init; } public string FirstName { get; init; } public string LastName { get; init; } } public class PDFGenerator { public static void CreatePersonPDF(Person person) { var htmlContent = $@" <html> <body> <h1>Person Information</h1> <p>ID: {person.Id}</p> <p>First Name: {person.FirstName}</p> <p>Last Name: {person.LastName}</p> </body> </html>"; var renderer = new ChromePdfRenderer(); var pdf = renderer.RenderHtmlAsPdf(htmlContent); pdf.SaveAs($"Person_{person.Id}.pdf"); } } class Program { static void Main(string[] args) { var person = new Person { Id = 1, FirstName = "Iron", LastName = "Dev" }; PDFGenerator.CreatePersonPDF(person); } } using IronPdf; public class Person { public int Id { get; init; } public string FirstName { get; init; } public string LastName { get; init; } } public class PDFGenerator { public static void CreatePersonPDF(Person person) { var htmlContent = $@" <html> <body> <h1>Person Information</h1> <p>ID: {person.Id}</p> <p>First Name: {person.FirstName}</p> <p>Last Name: {person.LastName}</p> </body> </html>"; var renderer = new ChromePdfRenderer(); var pdf = renderer.RenderHtmlAsPdf(htmlContent); pdf.SaveAs($"Person_{person.Id}.pdf"); } } class Program { static void Main(string[] args) { var person = new Person { Id = 1, FirstName = "Iron", LastName = "Dev" }; PDFGenerator.CreatePersonPDF(person); } } $vbLabelText $csharpLabel 結論 總而言之,C# init 關鍵字可讓您建立不可變對象,同時在物件初始化期間提供靈活性。 它比私有集合存取器更簡潔、更安全,減少了對建構函數樣板程式碼的需求。 將 init 關鍵字與唯讀欄位、結構體和驗證邏輯結合使用,有助於建立強大且安全的資料結構,在不犧牲可讀性或靈活性的前提下保持不可變性。 IronPDF提供免費試用,許可證起價為$799 。 這樣您就可以使用其全部功能,包括編輯、壓縮和保護 PDF 檔案。 常見問題解答 怎樣在 C# 中將 HTML 轉換為 PDF? 您可以使用 IronPDF 的 RenderHtmlAsPdf 方法將 HTML 字符串轉換為 PDF。您還可以使用 RenderHtmlFileAsPdf 將 HTML 文件轉換為 PDF。 C# 中 init 關鍵字的目的是什么? init 關鍵字允許您定義只能在物件初始化期間設定的屬性,從而確保其後的不變性。這項功能對於創建應保持不變的物件非常有用。 init 關鍵字如何增強 C# 中物件的不可變性? init 關鍵字可使屬性僅在物件的初始化階段設置,從而防止其後任何更改。這確保了物件在創建後保持不可變性。 init 屬性可以用於 PDF 生成庫嗎? 是的,init 屬性可以與像 IronPDF 這樣的庫一起使用,從不可變的物體生成 PDF,以確保 PDF 中所用資料在整個過程中保持一致。 使用 init 關鍵字比傳統設置器有何優勢? 相較於傳統設置器,使用 init 關鍵字可以提升不可變性,減少冗長的構造函數代碼,並確保在初始化後物件屬性無法修改。 如何將 PDF 生成與 C# 中的不可變屬性集成? 您可以使用 init 屬性創建不可變對象並將其傳遞給 IronPDF,這可以利用數據生成一致且可靠的 PDF 文檔。 init 關鍵字在創建現代 C# 應用程序中扮演了什麼角色? init 關鍵字在創建現代 C# 應用程序中非常重要,因為它允許開發者以簡潔的語法定義不可變對象,提高代碼的安全性並減少錯誤。 如何在 C# 項目中安裝 PDF 生成庫? 您可以使用 NuGet Package Manager 利用以下命令在 C# 項目中安裝像 IronPDF 這樣的庫:Install-Package IronPDF。 為什麼不可變性在應用程序開發中很重要? 不可變性很重要,因為它確保了應用程序中的數據完整性與一致性,使得維護更容易且降低了錯誤發生的可能性。 有哪些實用例子展示 init 關鍵字的使用? 一個實例是使用 init 關鍵字定義一個類,其屬性只能在初始化時設置,確保所創建的對象保持不變。這在數據一致性至關重要的情況下特別有用。 Jacob Mellor 立即與工程團隊聊天 首席技術官 Jacob Mellor是Iron Software的首席技術官,也是開創C# PDF技術的前瞻性工程師。作為Iron Software核心代碼庫的原始開發者,他自公司成立以來就塑造了公司的產品架構,並與CEO Cameron Rimington將公司轉型為服務NASA、Tesla以及全球政府機構的50多人公司。Jacob擁有曼徹斯特大學土木工程一級榮譽學士學位(1998年–2001年)。他於1999年在倫敦開立首家軟體公司,並於2005年建立了他的第一個.NET組件,專注於解決Microsoft生態系統中的複雜問題。他的旗艦作品IronPDF和Iron Suite .NET程式庫全球已獲得超過3000萬次NuGet安裝,他的基礎代碼不斷在全球各地驅動開發者工具。擁有25年以上的商業經驗和41年的編碼專業知識,Jacob仍然專注於推動企業級C#、Java和Python PDF技術的創新,同時指導下一代技術領導者。 相關文章 更新2026年2月20日 銜接 CLI 簡化與 .NET : 使用 Curl DotNet 與 IronPDF for .NET Jacob Mellor 藉由 CurlDotNet 彌補了這方面的不足,CurlDotNet 是為了讓 .NET 生態系統能熟悉 cURL 而建立的函式庫。 閱讀更多 更新2025年12月20日 RandomNumberGenerator C# 使用RandomNumberGenerator C#類可以幫助將您的PDF生成和編輯項目提升至新水準 閱讀更多 更新2025年12月20日 C#字符串等於(它如何對開發者起作用) 當結合使用強大的PDF庫IronPDF時,開關模式匹配可以讓您構建更智能、更清晰的邏輯來進行文檔處理 閱讀更多 FileStream C# (如何為開發人員運作)C# SemaphoreSlim(對開發者如...
更新2026年2月20日 銜接 CLI 簡化與 .NET : 使用 Curl DotNet 與 IronPDF for .NET Jacob Mellor 藉由 CurlDotNet 彌補了這方面的不足,CurlDotNet 是為了讓 .NET 生態系統能熟悉 cURL 而建立的函式庫。 閱讀更多