跳至頁尾內容
.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());
    }
}
$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
    }
}
$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;
    }
}
$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
    }
}
$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;
        }
    }
}
$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");
    }
}
$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# 中 getter 和 setter 的用途是什麼?

C# 中的 getter 和 setter 用於控制對類別私有屬性的存取。 getter 用於取得屬性的值,而 setter 允許修改屬性。這種封裝機制確保了對類別資料的存取安全可控。

存取修飾符如何影響 C# 中的屬性可見性?

在 C# 中,諸如publicprivate的存取修飾符決定了類別屬性的可見性和可訪問性。 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。

有哪些工具可用於增強 C# 開發中的 PDF 和條碼功能?

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 核心程式碼庫的最初開發者,他自公司成立之初便參與塑造了其產品架構,並與執行長 Cameron Rimington 一起將其發展成為一家擁有 50 多名員工、服務於 NASA、特斯拉和全球政府機構的公司。

Jacob 於 1998 年至 2001 年在曼徹斯特大學獲得土木工程一級榮譽學士學位。 1999 年,他在倫敦創辦了自己的第一家軟體公司;2005 年,他創建了自己的第一個 .NET 元件。此後,他專注於解決微軟生態系統中的複雜問題。

他的旗艦產品 IronPDF 和 IronSuite .NET 庫在全球 NuGet 上的安裝量已超過 3000 萬次,其基礎程式碼持續為全球開發者工具提供支援。憑藉 25 年的商業經驗和 41 年的程式設計專長,Jacob 始終致力於推動企業級 C#、Java 和 Python PDF 技術的創新,同時指導下一代技術領導者。