跳過到頁腳內容
.NET幫助

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

Getter 和 setter 是 C# 等物件導向程式語言中的基本概念。 這兩種方法使我們能夠控制對類別屬性的存取和修改。 在本教程中,我們將使用程式碼區塊探索 C# getter 和私有 setter 的初級和中級方面。

Getter 與 Setter 簡介

什麼是 Getter 和 Setter?

從本質上講,getter 和 setter 只不過是允許存取類別中的私有變數的方法。 getter 方法傳回私有欄位變數的值,而 setter 方法修改值。 這些方法確保能夠安全、正確地存取或修改類別的內部資料(欄位)。

我們為什麼需要它們?

想像一下,有一個 public class Car,它有一個 private string description 屬性。 如果班級以外的人想知道描述,他們無法直接訪問,因為它是私有的。 這就涉及到獲取者和設定者的角色了。

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());
    }
}
$vbLabelText   $csharpLabel

在上面的 class Person 中,我們既有 name 屬性的 getter (GetName),也有 setter (SetName)。 當你執行 static void Main 方法時,它會列印"John",因為我們已經使用 setter 為 name 設定了該值。

自動實現的屬性

現在,你可能會想,"我是否總是需要為 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
    }
}
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 類別中新增一個唯讀屬性:

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

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;
        }
    }
}
$vbLabelText   $csharpLabel

在這個例子中,Student 類別繼承自 Person 類,並重寫了 Name 屬性的 setter。 它在設定名稱之前新增了驗證檢查,確保名稱不為空或為null。

隆重介紹Iron Suite ,協助您提升 C# 開發效率

Iron Suite是一套研究工具集,可顯著提升 C# 開發能力。 它包括IronPDF、 IronXL、 IronOCR和IronBarcode。 這些工具各有其獨特用途,可以整合到 C# 的各個方面。

IronPDF一款強大的PDF管理工具

了解更多關於IronPDF 的信息,這是一個允許開發人員使用 C# 建立、讀取和編輯 PDF 文件的庫。 無論是將 HTML 轉換為 PDF,還是透過 getter 和 setter 管理 PDF 元數據, IronPDF都能滿足您的需求。

IronPDF在HTML 轉 PDF 方面表現出色,可確保精確保留原始佈局和樣式。 它非常適合從基於 Web 的內容(例如報告、發票和文件)建立 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

使用IronXL Excel Library處理 Excel 檔案時,可以簡化讀取和寫入過程。 此工具可用於操作 Excel 檔案中的私有和公用字串或整數,類似於在 C# 中使用相同的 getter 和 setter 語法在類別中處理資料的方式。

IronOCR - Optical Character Recognition in C

探索IronOCR ,這是一個光學字元辨識庫,可以將圖像轉換為可搜尋的文字。 如果您的應用程式涉及從掃描文件中讀取文本,IronOCR 的強大功能可以輕鬆整合。 它可以處理私有欄位和公共字串描述,就像您在前面的範例設定中的 Person 類別或 Student 類別中所期望的那樣。

IronBarcode - 條碼讀寫庫

了解IronBarcode 的各項功能,適用於需要條碼讀取和寫入的應用。 它既可以直接存取條碼數據,也可以透過自動屬性進行自訂,就像 C# 程式設計中使用的 getter 和 setter 一樣。

Iron Suite和 Getters and Setters

Iron Suite軟體套件與 C# 開發無縫集成,包括 getter 和 setter。 這些工具能為任何 C# 項目增添價值。

結論

總結起來:

  1. Getter and Setter: 它們幫助存取和修改類別的私有欄位。
  2. Auto Properties: 借助自動實現的屬性,實現自動獲取器和設定器的優雅方法。
  3. Access Modifiers: 它們有助於微調屬性的可訪問性。

現在,你應該已經熟練瞭如何在 C# 中使用 getter 和 setter。

Iron Suite 的工具套件為 C# 開發人員提供了強大的功能。 這些產品,包括IronPDF、 IronXL、 IronOCR和IronBarcode,都附帶Iron Software工具的免費試用版,讓您無需任何初始投資即可探索並將這些強大的庫整合到您的專案中。

當您準備提交時,個人許可證從 $799 開始。 如果您發現其中不只一個工具符合您的需求,您可以抓住機會,以兩個單獨授權的價格購買完整的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技術的創新,同時指導下一代技術領導者。

Iron Support Team

We're online 24 hours, 5 days a week.
Chat
Email
Call Me