C# Getter Setter(開發者的工作原理)
Getters 和 setters 是 C# 等物件導向程式語言的基本概念。 這兩種方法可讓我們控制類別屬性的存取與修改。 在本教程中,我們將探討 C# getters 和 private setters 使用程式碼區塊的初級和中級層面。
Getters 和 Setters 簡介
什麼是 Getters 和 Setters?
核心而言,getters 和 setters 只是允許存取類中私有變數的方法。 getter 會返回私有欄位變數的值,而 setter 則會修改該變數。 這些方法可確保類的內部資料 (欄位) 能安全且正確地被存取或修改。
我們為什麼需要這些工具?
想像一下,有一個 public class Car,它有一個 private string description 屬性。 如果這個班級以外的人想知道說明,他們無法直接存取,因為這是私有的。 這就是 getters 和 setters 的作用。
getter 允許使用者檢索 private string 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
在上面的程式碼中,我們既有 class Person 屬性的 getter(GetName),也有 setter(SetName)。 當你執行 static void Main 方法時,它會列印"John",因為我們已經使用 setter 為 name 設定了該值。
自動實作屬性
現在,您可能會想:"我是否總需要為 getters 和 setters 寫獨立的方法?答案是 "不"。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
在 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
在這個例子中,Description 屬性只能在 Person 類別的建構子中設定。 一旦設定好,就不能從外部修改。
私有設置器
有時候,您可能希望允許從類別外部讀取屬性,但只能從類別內部設定。 這是透過 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
在 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
在這個例子中,Student 類別繼承自 Person 類,並重寫了 Name 屬性的 setter。 它會在設定名稱之前加入驗證檢查,確保名稱不是空的或 null。
介紹 Iron Suite,增強您的 C# 開發。
Iron Suite 是研究工作工具的集合,可大幅提升 C# 開發能力。 它包括 IronPDF、IronXL、IronOCR 和 IronBarcode。 這些工具各有其獨特的用途,並可整合至 C# 的各個面向。
IronPDF - 強大的 PDF 管理工具
瞭解更多關於 IronPDF 的資訊,IronPDF 是一個可讓開發人員使用 C# 來建立、閱讀和編輯 PDF 文件的函式庫。 無論是將 HTML 轉換為 PDF,或是透過 getters 和 setters 管理 PDF 元資料,IronPDF 都能滿足您的需求。
IronPDF 擅長於 HTML 至 PDF 的轉換,可確保精確保留原始版面與樣式。 它非常適合從網頁內容(如報告、發票和文件)建立 PDF。 IronPDF 支援 HTML 檔案、URL 和原始 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");
}
}
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
IronXL.Excel - Excel 操作變得簡單。
在處理 Excel 檔案時,IronXL.Excel Library 可簡化讀取和寫入的過程。 此工具可用於操作 Excel 檔案的私有和公用字串或整數,類似於您使用 C# 中 getters 和 setters 的相同語法處理類內的資料。
IronOCR - C# 中的光學字元識別
探索 IronOCR,這是一個光學字元識別庫,可將影像翻譯成可搜尋的文字。 如果您的應用程式涉及讀取掃描文件中的文字,IronOCR 強大的功能可以輕鬆整合。 它可以處理私有欄位和公共字串說明,就像您在之前範例設定中的類別 Person 或類別 Student 中所預期的一樣。
IronBarcode - 條碼讀寫函式庫
發現 IronBarcode 功能,適用於需要條碼讀寫的應用程式。 它允許直接存取 BarCode 資料,也允許透過自動屬性進行自訂,就像 C# 程式設計中使用的 getters 和 setters。
Iron Suite 與 Getters 和 Setters
Iron Suite 套件可與 C# 開發無縫整合,包括 getters 和 setters。 這些工具可為任何 C# 專案增加價值。
結論
總括而言
Getter and Setter: 它們幫助存取和修改類別的私有欄位。Auto Properties: 借助自動實現的屬性,實現自動獲取器和設定器的優雅方法。Access Modifiers: 它們有助於微調屬性的可訪問性。
到目前為止,您應該已經牢固掌握如何在 C# 中使用 getters 和 setters。
Iron Suite 的工具套件為 C# 開發人員提供令人難以置信的功能。 包括 IronPDF、IronXL、IronOCR 和 IronBarcode 在內的每一款產品都附贈 免費試用 Iron Software 工具,讓您無需任何初始投資即可探索這些功能強大的函式庫,並將其整合到您的專案中。
當您準備提交時,單一許可證從 $999 開始。 如果您發現這些工具中有超過一種符合您的需求,您可以利用這個機會,只花兩個個別授權的價格,就能購買完整的 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 能力及條形碼讀寫。



