.NET幫助 C# Getter Setter(開發者的工作原理) Curtis Chau 更新日期:7月 28, 2025 Download IronPDF NuGet 下載 DLL 下載 Windows 安裝程式 Start Free Trial Copy for LLMs Copy for LLMs Copy page as Markdown for LLMs Open in ChatGPT Ask ChatGPT about this page Open in Gemini Ask Gemini about this page Open in Grok Ask Grok about this page Open in Perplexity Ask Perplexity about this page Share Share on Facebook Share on X (Twitter) Share on LinkedIn Copy URL Email article Getter 和 setter 是類似 C# 這類物件導向程式語言中的基本概念。 這兩個方法允許我們控制類別屬性的存取和修改。 在本教程中,我們將通過程式碼塊探討 C# getter 和 private setter 的初學者和中級方面。 Getter 和 Setter 介紹 什麼是 Getter 和 Setter? 從本質上來說,getter 和 setter 只是允許存取類別內的私有變數的方法。 getter 返回私有欄位變數的值,而 setter 則用來修改它。 這些方法確保類別的內部數據(欄位)被安全和正確地存取或修改。 為什麼我們需要它們? 假設有一個 public class Car 並具有一個 private string description 屬性。 如果有人在這個類別外部想知道 description,他們無法直接存取它,因為它是私有的。 這時,getter 和 setter 的角色就發揮作用了。 getter 會讓用戶在不直接修改 private 屬性的情況下,檢索 private string description 的值。 另一方面,setter 會讓用戶在我們設置的條件下修改 description。 存取修飾符 存取修飾符定義了欄位或屬性對於類外部的可見性和可存取程度。 最常用的修飾符是 public 和 private。 Public:public 宣告的欄位或屬性可以從程序中的任何地方存取。 例如,您可能有一個 public int Age 屬性,該屬性可以被您代碼的任何部分存取和修改。 Private:宣告為 private 的屬性或欄位只能在定義的類別內存取,例如 private int age。 這種封裝有助於防止未授權的修改,並確保類別的內部狀態得到適當維護。 簡單的 Getter 和 Setter 讓我們從一個簡單的例子開始。 using System; public class Person { private string name; // This is a private string name property variable // This is the getter public string GetName() { return name; } // This is the setter public void SetName(string newName) { name = newName; } } class Program { static void Main() { Person person = new Person(); person.SetName("John"); Console.WriteLine(person.GetName()); } } using System; public class Person { private string name; // This is a private string name property variable // This is the getter public string GetName() { return name; } // This is the setter public void SetName(string newName) { name = newName; } } class Program { static void Main() { Person person = new Person(); person.SetName("John"); Console.WriteLine(person.GetName()); } } Imports System Public Class Person Private name As String ' This is a private string name property variable ' This is the getter Public Function GetName() As String Return name End Function ' This is the setter Public Sub SetName(ByVal newName As String) name = newName End Sub End Class Friend Class Program Shared Sub Main() Dim person As New Person() person.SetName("John") Console.WriteLine(person.GetName()) End Sub End Class $vbLabelText $csharpLabel 在上面的 class Person 中,我們有一個 getter(GetName)和一個 setter(SetName)用於 name 屬性。 當您運行 static void Main 方法時,它將印出「John」,因為我們通過 setter 為 name 設定了該值。 自動實現的屬性 現在,您可能會想:「我是否總是需要為 getter 和 setter 編寫單獨的方法?」答案是「不」。C# 引入了一個叫做「自動實現的屬性」或「自動屬性」的概念來簡化此過程。 在 C# 中,您可以使用自動屬性,這為您提供了一種簡單的方法來宣告 private field 及其相關的屬性。 以下是示例: using System; public class Student { public string Name { get; set; } // This is an auto-implemented or automatic property public string Title { get; set; } // Another auto-implemented property } class Program { static void Main() { Student student = new Student(); student.Name = "Alice"; // Using setter Console.WriteLine(student.Name); // Using getter } } using System; public class Student { public string Name { get; set; } // This is an auto-implemented or automatic property public string Title { get; set; } // Another auto-implemented property } class Program { static void Main() { Student student = new Student(); student.Name = "Alice"; // Using setter Console.WriteLine(student.Name); // Using getter } } Imports System Public Class Student Public Property Name() As String ' - This is an auto-implemented or automatic property Public Property Title() As String ' - Another auto-implemented property End Class Friend Class Program Shared Sub Main() Dim student As New Student() student.Name = "Alice" ' Using setter Console.WriteLine(student.Name) ' Using getter End Sub End Class $vbLabelText $csharpLabel 在 Student 類中,Name 屬性既是 getter 又是 setter,且是自動實現的。 C# 編譯器在背後創建了一個 private string name 欄位,並通過 Name 屬性讓該欄位可以存取。 屬性中的高級存取修飾符 只讀屬性 有時,您可能想要提供一個可以讀取但不能外部修改的屬性。 這就是只讀屬性的出色用處。 您可以在屬性中省略 setter 來使其為只讀。 假設我們想要為 Person 類添加一個只讀的 string Description 屬性: public class Person { public string Name { get; set; } public string Description { get; } public Person(string name, string description) { Name = name; Description = description; } } public class Person { public string Name { get; set; } public string Description { get; } public Person(string name, string description) { Name = name; Description = description; } } Public Class Person Public Property Name() As String Public ReadOnly Property Description() As String Public Sub New(ByVal name As String, ByVal description As String) Me.Name = name Me.Description = description End Sub End Class $vbLabelText $csharpLabel 在此例子中,Description 屬性只能在 Person 類的構造函數中設定。 一旦設定,就不能外部修改。 Private Setters 有時,您可能想允許從類外部讀取屬性,但只允許從類內部設定。 這可以用 private set 實現。 using System; public class Program { public string Description { get; private set; } public Program() { Description = "This is a program about getters and setters."; } } class ProgramTest { static void Main() { Program myProgram = new Program(); Console.WriteLine(myProgram.Description); // Allowed // myProgram.Description = "New Description"; // Not allowed } } using System; public class Program { public string Description { get; private set; } public Program() { Description = "This is a program about getters and setters."; } } class ProgramTest { static void Main() { Program myProgram = new Program(); Console.WriteLine(myProgram.Description); // Allowed // myProgram.Description = "New Description"; // Not allowed } } Imports System Public Class Program Private privateDescription As String Public Property Description() As String Get Return privateDescription End Get Private Set(ByVal value As String) privateDescription = value End Set End Property Public Sub New() Description = "This is a program about getters and setters." End Sub End Class Friend Class ProgramTest Shared Sub Main() Dim myProgram As New Program() Console.WriteLine(myProgram.Description) ' Allowed ' myProgram.Description = "New Description"; // Not allowed End Sub End Class $vbLabelText $csharpLabel 在 class Program 中,Description 屬性有一個 private set,這意味著它無法從類外部更改,確保數據的完整性。 繼承和覆寫 在處理派生類別時,您可以覆寫 getter 和 setter 方法以自定義它們的行為。 這使您可以在獲取或設置值時添加額外邏輯。 public class Person { public virtual string Name { get; set; } } public class Student : Person { private string studentID; public override string Name { get { return base.Name; } set { if (!string.IsNullOrEmpty(value)) base.Name = value; } } } public class Person { public virtual string Name { get; set; } } public class Student : Person { private string studentID; public override string Name { get { return base.Name; } set { if (!string.IsNullOrEmpty(value)) base.Name = value; } } } Public Class Person Public Overridable Property Name() As String End Class Public Class Student Inherits Person Private studentID As String Public Overrides Property Name() As String Get Return MyBase.Name End Get Set(ByVal value As String) If Not String.IsNullOrEmpty(value) Then MyBase.Name = value End If End Set End Property End Class $vbLabelText $csharpLabel 在這個例子中,Student 類繼承自 Person 並覆蓋 Name 屬性的 setter。 它在設置 name 前增加了一個驗證檢查,確保它不為空或 null。 引入 Iron Suite 以提升您的 C# 開發 Iron Suite 是一組研究工具,顯著提升 C# 開發能力。 它包含 IronPDF、IronXL、IronOCR 和 IronBarcode。 這些工具中的每一個都具有獨特的目的,並且可以整合到 C# 的各個方面。 IronPDF - 強大的 PDF 管理工具 進一步了解 IronPDF,這是一個允許開發人員在 C# 中創建、讀取和編輯 PDF 文檔的庫。 無論是將 HTML 轉換為 PDF 還是通過 getter 和 setter 管理 PDF 元數據,IronPDF 都能滿足您的需求。 IronPDF 在HTML 到 PDF轉換方麵表現出色,確保準確保持原始佈局和樣式。 它非常適合從網路內容生成 PDF,如報告、發票和文檔。 支持 HTML 文件、URL 和原始 HTML 字串的 IronPDF 可以輕鬆生成高質量的 PDF 文檔。 using IronPdf; class Program { static void Main(string[] args) { var renderer = new ChromePdfRenderer(); // 1. Convert HTML String to PDF var htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a PDF from an HTML string.</p>"; var pdfFromHtmlString = renderer.RenderHtmlAsPdf(htmlContent); pdfFromHtmlString.SaveAs("HTMLStringToPDF.pdf"); // 2. Convert HTML File to PDF var htmlFilePath = "path_to_your_html_file.html"; // Specify the path to your HTML file var pdfFromHtmlFile = renderer.RenderHtmlFileAsPdf(htmlFilePath); pdfFromHtmlFile.SaveAs("HTMLFileToPDF.pdf"); // 3. Convert URL to PDF var url = "http://ironpdf.com"; // Specify the URL var pdfFromUrl = renderer.RenderUrlAsPdf(url); pdfFromUrl.SaveAs("URLToPDF.pdf"); } } using IronPdf; class Program { static void Main(string[] args) { var renderer = new ChromePdfRenderer(); // 1. Convert HTML String to PDF var htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a PDF from an HTML string.</p>"; var pdfFromHtmlString = renderer.RenderHtmlAsPdf(htmlContent); pdfFromHtmlString.SaveAs("HTMLStringToPDF.pdf"); // 2. Convert HTML File to PDF var htmlFilePath = "path_to_your_html_file.html"; // Specify the path to your HTML file var pdfFromHtmlFile = renderer.RenderHtmlFileAsPdf(htmlFilePath); pdfFromHtmlFile.SaveAs("HTMLFileToPDF.pdf"); // 3. Convert URL to PDF var url = "http://ironpdf.com"; // Specify the URL var pdfFromUrl = renderer.RenderUrlAsPdf(url); pdfFromUrl.SaveAs("URLToPDF.pdf"); } } Imports IronPdf Friend Class Program Shared Sub Main(ByVal args() As String) Dim renderer = New ChromePdfRenderer() ' 1. Convert HTML String to PDF Dim htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a PDF from an HTML string.</p>" Dim pdfFromHtmlString = renderer.RenderHtmlAsPdf(htmlContent) pdfFromHtmlString.SaveAs("HTMLStringToPDF.pdf") ' 2. Convert HTML File to PDF Dim htmlFilePath = "path_to_your_html_file.html" ' Specify the path to your HTML file Dim pdfFromHtmlFile = renderer.RenderHtmlFileAsPdf(htmlFilePath) pdfFromHtmlFile.SaveAs("HTMLFileToPDF.pdf") ' 3. Convert URL to PDF Dim url = "http://ironpdf.com" ' Specify the URL Dim pdfFromUrl = renderer.RenderUrlAsPdf(url) pdfFromUrl.SaveAs("URLToPDF.pdf") End Sub End Class $vbLabelText $csharpLabel IronXL - Excel 操作變得簡單 處理 Excel 文件時,IronXL Excel 庫 簡化了讀取和寫入過程。 此工具可用於操作 Excel 文件的私有和公共字串或整數,類似於您在類內使用 C# 的 getter 和 setter 處理數據的方式。 IronOCR - 光學字符識別於 C# 探索 IronOCR,一個將影像轉換為可搜尋文本的光學字符識別庫。 如果您的應用涉及從掃描文檔中閱讀文本,則可以輕鬆集成使用 IronOCR 的強大功能。 它可以像處理類別 Person 或類別 Student 的示例設置那樣,處理私有欄位和公共字串描述。 IronBarcode - 條碼讀取和寫入庫 發現 IronBarcode 功能 用於需要條碼讀取和寫入的應用。 它允許您像在 C# 編程中使用 getter 和 setter 那樣直接存取條碼數據和通過自動屬性進行自定義。 Iron Suite 和 Getter 和 Setter Iron Suite 套裝與 C# 開發無縫集成,包括 getter 和 setter。 這些工具為任何 C# 專案增添價值。 結論 總結一下: Getter 和 Setter:它們幫助存取和修改類別的私有欄位。 自動屬性:一種借助自動實現屬性的優雅方式來擁有自動的 getter 和 setter。 存取修飾符:它們幫助微調屬性的可存取性。 到目前為止,您應該已經掌握了如何在 C# 中使用 getter 和 setter。 Iron Suite 的一套工具為 C# 開發人員提供了極大的功能性。 這些產品中的每一個,包括 IronPDF、IronXL、IronOCR 和 IronBarcode,都帶有Iron Software 工具的免費試用,允許您探索並將這些強大的庫整合到您的專案中,而無需任何初始投資。 當您準備好承諾時,個人許可證價格從 $799 開始。 如果您發現這些工具中的多個滿足您的需求,您可以藉此機會以僅兩個個別許可證的價格購買完整的 Iron Suite 套裝。 常見問題解答 C# 中的 getter 和 setter 的目的何在? C# 中的 getter 和 setter 用於控制對類的私有屬性的訪問。Getter 檢索屬性的值,而 setter 則允許修改屬性。這種封裝確保了對類的數據進行安全和控制的訪問。 存取修飾符如何影響 C# 中的屬性可見性? 存取修飾符如 public 和 private 決定了 C# 中類的屬性的可見性和可訪問性。Public 屬性可以從任何地方訪問,而 private 屬性則僅限於它們所聲明的類。 C# 中什麼是自動實現屬性? 自動實現屬性提供了一種簡寫來聲明 C# 中的屬性。它們允許您在不顯式編寫單獨字段、getter 和 setter 的情況下定義屬性。編譯器會為您自動創建一個後援字段。 如何在 C# 中創建只讀屬性? 在 C# 中,可以通過在屬性聲明中省略 setter 來創建只讀屬性。這意味著該屬性只能在類內設置(例如在構造函數中),而不能在外部修改。 如何在 C# 中使用私有 setter? C# 中的私有 setter 允許屬性僅在其所聲明的類內修改,同時仍允許外部代碼讀取該屬性。這對於在提供控制的訪問同時維持數據的完整性很有用。 是否可以在 C# 的派生類中重寫屬性行為? 是的,在 C# 中您可以通過將基類中的屬性標記為 virtual 並在派生類中使用 override 關鍵字來重寫屬性行為。這允許自定義 getter 和 setter 的行為。 如何在 C# 中將 HTML 轉換為 PDF? 您可以使用 IronPDF 的 RenderHtmlAsPdf 方法將 HTML 字符串轉換為 PDF。您還可以使用 RenderHtmlFileAsPdf 將 HTML 文件轉換為 PDF。 有哪些工具可用於增強具有 PDF 與條形碼功能的 C# 開發? Iron Suite 提供如 IronPDF 和 IronBarcode 等工具,通過提供如 PDF 管理和條形碼讀寫等功能來增強 C# 開發。這些工具可無縫集成到 C# 專案中。 Iron Suite 對 C# 開發人員有什麼好處? Iron Suite 對 C# 開發人員有益,因為它提供了一系列強大的工具,這些工具可以無縫集成到 C# 專案中。這些工具提供了高級功能,如 PDF 管理、Excel 操控、OCR 能力及條形碼讀寫。 Curtis Chau 立即與工程團隊聊天 技術作家 Curtis Chau 擁有卡爾頓大學計算機科學學士學位,專注於前端開發,擅長於 Node.js、TypeScript、JavaScript 和 React。Curtis 熱衷於創建直觀且美觀的用戶界面,喜歡使用現代框架並打造結構良好、視覺吸引人的手冊。除了開發之外,Curtis 對物聯網 (IoT) 有著濃厚的興趣,探索將硬體和軟體結合的創新方式。在閒暇時間,他喜愛遊戲並構建 Discord 機器人,結合科技與創意的樂趣。 相關文章 更新日期 9月 4, 2025 RandomNumberGenerator C# 使用RandomNumberGenerator C#類可以幫助將您的PDF生成和編輯項目提升至新水準 閱讀更多 更新日期 9月 4, 2025 C#字符串等於(它如何對開發者起作用) 當結合使用強大的PDF庫IronPDF時,開關模式匹配可以讓您構建更智能、更清晰的邏輯來進行文檔處理 閱讀更多 更新日期 8月 5, 2025 C#開關模式匹配(對開發者來說是如何工作的) 當結合使用強大的PDF庫IronPDF時,開關模式匹配可以讓您構建更智能、更清晰的邏輯來進行文檔處理 閱讀更多 C# 邏輯運算符(開發者的工作原理)C# 分割字串(開發者的工...