
C# Getter Setter(開發者的工作原理)
Getter 和 Setter 是物件導向程式語言中如 C# 的基本概念。 這兩種方法允許我們控制類別屬性的存取和修改。 在本教程中,我們將透過程式碼塊探索 C# 中 getter 和 private setter 的初學者和中級層面。
Getter 和 Setter 簡介
什麼是 Getter 和 Setter?
基本上,getter 和 setter 只是允許存取類別中私有變數的方法。 Getter 返回私有欄位變數的值,而 Setter 則修改它。 這些方法確保類別的內部資料(欄位)能夠被安全且正確地存取或修改。
為什麼我們需要它們?
想像有一個 public class Car 具有一個 private string description 屬性。 如果類別外的人想知道描述,因為它是私有的,他們不能直接存取它。 這時 Getter 和 Setter 就派上用場了。
Getter 可以允許使用者檢索 private string description 的值,而不讓他們直接修改。 而 Setter 則允許我們設定條件下的使用者修改描述。
存取修飾符
存取修飾符定義了從類別外部存取欄位或屬性的可見性和可存取性等級。 最常使用的修飾符是 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());
}
}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
Module Program
Sub Main()
Dim person As New Person()
person.SetName("John")
Console.WriteLine(person.GetName())
End Sub
End Module在上面的 class Person 中,我們有一個名為 GetName 的 getter 和一個名為 SetName 的 setter 用於 name 屬性。 當您執行 static void Main 方法時,它將列印 "John",因為我們利用 setter 為名稱設置了這個值。
自動實作屬性
現在,您可能在想,"我總是需要為 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
}
}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在 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 Property Name As String
Public ReadOnly Property Description As String
Public Sub New(name As String, description As String)
Me.Name = name
Me.Description = description
End Sub
End Class在這個例子中,Description 屬性只能在 Person 類別的構造函式內設置。 一旦設置,它無法在外部修改。
私有 Setter
有時,您可能希望允許屬性從類別外部讀取,但只能在類別內設置。 這是利用 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
}
}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在 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 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在這個例子中,Student 類別繼承自 Person 並覆蓋 Name 屬性的 setter。 在設置名稱之前新增了一個檢查,確保其不為空或 null。
Introducing Iron Suite to Enhance Your C# Development
Iron Suite 是一組提供顯著提高 C# 開發能力的研究工具。 它包含 IronPDF、IronXL、IronOCR 和 IronBarcode。 每個工具都有獨特的用途,可以整合到 C# 的各個方面。
IronPDF - 強大的 PDF 管理工具
進一步了解 IronPDF,這是一個允許開發人員在 C# 中建立、讀取和編輯 PDF 文件的程式庫。 無論是將 HTML 轉換為 PDF 還是透過 getters 和 setters 管理 PDF 元資料,IronPDF 都能滿足您的需求。
IronPDF在HTML到PDF轉換方面表現出色,確保精確保留原始設計和樣式。 它非常適合從基於網路的內容如報告、發票和文件中建立PDF。 IronPDF支持HTML文件、URLs和原始HTML字串,輕鬆生成高品質的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 ClassIronXL - Excel 操作變得簡單
在處理 Excel 檔案時,IronXL Excel Library 簡化了讀寫過程。 這個工具可以用來操作 Excel 文件的私有和公共字串或整數,就像在類別中使用 getter 和 setter 的相同語法一樣。
IronOCR - Optical Character Recognition in C#
探索 IronOCR,這是一個將影像轉換為可搜尋文字的光學文字識別程式庫。 如果您的應用程式涉及從掃描文件中讀取文字,IronOCR 的強大功能可以輕鬆整合。 它可以處理私有欄位和公共字串描述,就像您在前面的例子中設定的 Person 或 Student 類別一樣。
IronBarcode - 條碼讀取與書寫程式庫
發掘 IronBarcode 的功能,適用於需要條碼讀取和書寫的應用程式。 它允許直接存取條碼資料和透過自動屬性自訂,就像 C# 程式設計中使用的 getters 和 setters 一樣。
Iron Suite and Getters and Setters
Iron Suite 套件無縫整合於 C# 開發,包括 getters 和 setters。 這些工具為任何 C# 專案增值。
結論
總結:
Getter and Setter:它們有助於存取和修改類別的私有欄位。Auto Properties:透過自動屬性提供一種優雅的方法來擁有自動的 getters 和 setters。Access Modifiers:它們有助於微調屬性的可存取性。
到目前為止,您應該對如何在 C# 中使用 getters 和 setters 有了一個紮實的理解。
Iron Suite 的工具集合為 C# 開發人員提供了強大的功能。 這些產品,包括 IronPDF、IronXL、IronOCR 和 IronBarcode,均附帶Iron Software 工具的免費試用,允許您無需任何初始投資就能探索並整合這些強大的程式庫到您的項目中。
當您準備好承諾時,單獨的授權價格從 $999 開始。 如果您發現有多個工具符合您的需求,您可以利用這個機會,以僅僅兩個單獨授權的價格購買完整的 Iron Suite 套件。

Jacob Mellor是Iron Software的首席技術官,一位在C# PDF技術上開創先河的遠見工程師。作為Iron Software核心程式碼庫的原開發者,他從創立以來就一直在塑造公司的產品架構,與首席執行官Cameron Rimington一起將公司轉變為服務於NASA、特斯拉和全球政府公司的50多名人員的公司。
相關文章


