跳過到頁腳內容
.NET幫助

C# Getter Setter(開發者的工作原理)

Getters 和 setters 是 C# 等物件導向程式語言的基本概念。 這兩種方法可讓我們控制類別屬性的存取與修改。 在本教程中,我們將探討 C# getters 和 private setters 使用程式碼區塊的初級和中級層面。

Getters 和 Setters 簡介

什麼是 Getters 和 Setters?

核心而言,getters 和 setters 只是允許存取類中私有變數的方法。 getter 會返回私有欄位變數的值,而 setter 則會修改該變數。 這些方法可確保類的內部資料 (欄位) 能安全且正確地被存取或修改。

我們為什麼需要這些工具?

想像一下,有一個 公開類別 Car 擁有一個 private string description 屬性。 如果這個班級以外的人想知道說明,他們無法直接存取,因為這是私有的。 這就是 getters 和 setters 的作用。

getter 將允許使用者擷取 private 字串說明的值,但不會給予使用者直接修改的權限。 另一方面,設定器可讓使用者在我們設定的條件下修改說明。

存取修改器

存取修改器定義了欄位或屬性從類別外部的可見性與可存取性的層級。 最常用的修飾詞是 publicprivate

  • 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 設定該值為名稱。

自動實作屬性

現在,您可能會想:"我是否總需要為 getters 和 setters 寫獨立的方法?答案是 "不"。C# 引入了一個稱為 "自動實現屬性 "或 "自動屬性 "的概念來簡化這一點。

在 C# 中,您可以使用自動屬性,它為您提供了宣告 private 欄位 及其相關屬性的速記方法。 以下是一個範例:

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 類中加入一個唯讀 字串 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 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

類 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。 它會在設定名稱之前加入驗證檢查,確保名稱不是空的或 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
$vbLabelText   $csharpLabel

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# 專案增加價值。

結論

總括而言

1.Getter 和 Setter:它們有助於存取和修改類別的私有欄位。 2.自動屬性:在自動實作屬性的幫助下,擁有自動 getter 和 setter 的優雅方式。 3.Access Modifiers:它們有助於微調屬性的存取性。

到目前為止,您應該已經牢固掌握如何在 C# 中使用 getters 和 setters。

Iron Suite 的工具套件為 C# 開發人員提供令人難以置信的功能。 包括 IronPDF、IronXL、IronOCR 和 IronBarcode 在內的每一款產品都附贈 免費試用 Iron Software 工具,讓您無需任何初始投資即可探索這些功能強大的函式庫,並將其整合到您的專案中。

當您準備提交時,個別授權的起始價格為 $799 。 如果您發現這些工具中有超過一種符合您的需求,您可以利用這個機會,只花兩個個別授權的價格,就能購買完整的 Iron Suite 套件。

常見問題解答

C# 中的 getters 和 setters 有何作用?

C# 中的 Getters 和 setters 用於控制對類的私有屬性的存取。Getters 擷取屬性的值,而 setters 則允許修改屬性。這種封裝方式可確保安全且受控地存取類別的資料。

存取修改器如何影響 C# 中的屬性可見度?

在 C# 中,publicprivate 等存取修改器決定了類別屬性的可見性和存取性。Public 屬性可從任何地方存取,而 private 屬性則只限於其所宣告的類別。

什麼是 C# 中的自動實作屬性?

自動實現的屬性提供在 C# 中宣告屬性的速記方式。它們允許您定義一個屬性,而不需要明確地寫一個單獨的欄位、getter 和 setter。編譯器會自動為您建立一個後備欄位。

如何在 C# 中建立唯讀屬性?

在 C# 中,您可以透過省略屬性宣告中的 setter 來建立唯讀屬性。這表示該屬性只能在類內設定,例如在構建器中,而不能在外部修改。

如何在 C# 中使用私有設置器?

C# 中的私有設置器允許只在其宣告的類別中修改屬性,同時仍允許外部程式碼讀取該屬性。這對於在提供受控存取的同時維持資料的完整性非常有用。

您可以在 C# 中覆寫派生類中的屬性行為嗎?

是的,在 C# 中,您可以透過將基類中的屬性標記為 virtual 並在派生類中使用 override 關鍵字,來覆寫派生類中的屬性行為。這允許自訂 getter 和 setter 行為。

如何在 C# 中將 HTML 轉換為 PDF?

您可以使用 IronPDF 的 RenderHtmlAsPdf 方法將 HTML 字串轉換成 PDF。您也可以使用 RenderHtmlFileAsPdf 將 HTML 檔案轉換成 PDF。

有哪些工具可用來增強 C# 開發的 PDF 和 BarCode 功能?

Iron Suite 提供 IronPDF 和 IronBarcode 等工具,這些工具透過提供 PDF 管理和條碼讀/寫等功能來強化 C# 開發。這些工具可與 C# 專案無縫整合。

Iron Suite 為何能讓 C# 開發人員獲益良多?

Iron Suite 提供一系列可與 C# 專案無縫整合的強大工具,對 C# 開發人員相當有利。這些工具提供先進的功能,例如 PDF 管理、Excel 操作、OCR 功能和 BarCode 讀/寫。

Jacob Mellor, Team Iron 首席技术官
首席技术官

Jacob Mellor 是 Iron Software 的首席技術官,作為 C# PDF 技術的先鋒工程師。作為 Iron Software 核心代碼的原作者,他自開始以來塑造了公司產品架構,與 CEO Cameron Rimington 一起將其轉變為一家擁有超過 50 名員工的公司,為 NASA、特斯拉 和 全世界政府機構服務。

Jacob 持有曼徹斯特大學土木工程一級榮譽学士工程學位(BEng) (1998-2001)。他於 1999 年在倫敦開設了他的第一家軟件公司,並於 2005 年製作了他的首個 .NET 組件,專注於解決 Microsoft 生態系統內的複雜問題。

他的旗艦產品 IronPDF & Iron Suite .NET 庫在全球 NuGet 被安裝超過 3000 萬次,其基礎代碼繼續為世界各地的開發工具提供動力。擁有 25 年的商業經驗和 41 年的編碼專業知識,Jacob 仍專注於推動企業級 C#、Java 及 Python PDF 技術的創新,同時指導新一代技術領袖。