跳過到頁腳內容
.NET幫助

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 的值,而不給他們直接修改它的權限。 另一方面,設定器可讓使用者在我們設定的條件下修改說明。

存取修改器

存取修改器定義了欄位或屬性從類別外部的可見性與可存取性的層級。 最常用的修飾符是 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)。 當你執行 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
$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 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。 它會在設定名稱之前加入驗證檢查,確保名稱不是空的或 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 and Setter: 它們幫助存取和修改類別的私有欄位。
  2. Auto Properties: 借助自動實現的屬性,實現自動獲取器和設定器的優雅方法。
  3. 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# 中的屬性可見性?

存取修飾符如 publicprivate 決定了 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 能力及條形碼讀寫。

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

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技術的創新,同時指導下一代技術領導者。

鋼鐵支援團隊

我們每週 5 天,每天 24 小時在線上。
聊天
電子郵件
打電話給我