.NET 幫助

C# Getter Setter(開發人員如何運作)

發佈 2023年8月29日
分享:

Getter 和 setter 是物件導向程式語言(如 C#)中的基本概念。 這兩種方法允許我們控制類別屬性的存取和修改。 在本教程中,我們將通過代碼塊探討 C# getter 和 private setter 的初級和中級方面。

Getters 和 Setters 簡介

什麼是Getter和Setter?

從本質上講,getter 和 setter 只不過是在類中具有相同名稱的方法。 getter返回私有字段變數的值,而setter則修改其重要性。 這些方法確保一個類別的內部數據(欄位)是以安全和正確的方式訪問或修改。

為什麼我們需要它們?

想像一下,有一個 public class car,其中有一個 private string description property name。 如果這個類別外的人想知道描述,他們無法直接存取,因為這是私有的。 這就是取得器和設定器的作用。

一個 getter 可讓使用者在不直接修改的情況下檢索 private string description 的值。 另一方面,設置器將允許用戶在我們設定的條件下修改隱含的參數描述。

訪問修飾符

存取修改子定義了從類別外部訪問一個字段或屬性的可見性和可訪問性的等級。 最常使用的修飾符是 publicprivate

  • Public:宣告為public的欄位或屬性可以在程式中的任何地方存取。 例如,您可能有一個 public int age 屬性,可以被程式碼的任何部分訪問和修改。
  • Private:宣告為 private 的屬性或欄位只能在定義的類別內部訪問,例如 private int age。 這種封裝有助於防止未經授權的修改,確保類別的內部狀態得到適當維護。

簡單的獲取器和設置器

讓我們從一個簡單的例子開始。

//set accessor
public class Person
{
    private string name;  // This is a private string name property variable

    public string GetName()   // This is the getter
    {
        return name;
    }

    public void SetName(string newName)   // This is the setter, new value
    {
        name = newName;
    }
}

static void Main()
{
    Person person = new Person();
    person.SetName("John");
    Console.WriteLine(person.GetName());
}
//set accessor
public class Person
{
    private string name;  // This is a private string name property variable

    public string GetName()   // This is the getter
    {
        return name;
    }

    public void SetName(string newName)   // This is the setter, new value
    {
        name = newName;
    }
}

static void Main()
{
    Person person = new Person();
    person.SetName("John");
    Console.WriteLine(person.GetName());
}
'set accessor
Public Class Person
	Private name As String ' This is a private string name property variable

	Public Function GetName() As String ' This is the getter
		Return name
	End Function

	Public Sub SetName(ByVal newName As String) ' This is the setter, new value
		name = newName
	End Sub
End Class

Shared Sub Main()
	Dim person As New Person()
	person.SetName("John")
	Console.WriteLine(person.GetName())
End Sub
VB   C#

在上述的 class Person 中,我們有一個 getter(取得名稱)和設置器(設置名稱)用於 name 屬性。 當您運行 static void Main 方法時,會打印 "John",因為我們使用設置器為姓名設置了該值。

自動實作屬性

現在,你可能會想,「我是否總是需要為取值器和設置器編寫單獨的方法?」答案是「不需要」。C# 引入了一個稱為「自動實現屬性」或「自動屬性」的概念來簡化這個過程。

在 C# 中,你可以使用自動屬性,這可以簡化宣告 private field 及其相關屬性的寫法。 這是個例子:

public class Student
{
    public string Name { get; set; } // This is an auto-implemented or automatic property, public string Name
    public string Title {get; set;}
}

static void Main()
{
    Student student = new Student();
    student.Name = "Alice";  // Using setter
    Console.WriteLine(student.Name);  // Using getter
}
public class Student
{
    public string Name { get; set; } // This is an auto-implemented or automatic property, public string Name
    public string Title {get; set;}
}

static void Main()
{
    Student student = new Student();
    student.Name = "Alice";  // Using setter
    Console.WriteLine(student.Name);  // Using getter
}
Public Class Student
	Public Property Name() As String ' -  This is an auto-implemented or automatic property, public string Name
	Public Property Title() As String
End Class

Shared Sub Main()
	Dim student As New Student()
	student.Name = "Alice" ' Using setter
	Console.WriteLine(student.Name) ' Using getter
End Sub
VB   C#

Student class 中,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
VB   C#

在此範例中,Description 屬性只能在 Person 類的建構函式中設定,並使用較少的程式碼。 一旦設定,它就無法在外部修改。

私有設置器

有時,您可能希望允許屬性可以從類之外讀取,但只能在類內進行設置。 這是使用 private set 達成的。

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
    }
}
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
    }
}
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
VB   C#

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
VB   C#

在此範例中,Student 類別繼承自 Person 並覆蓋了 Name 屬性的設定子。 它在設定名稱之前添加了驗證檢查,以確保名稱不為空或為 null。

介紹 Iron Suite 提升您的 C# 開發水平

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

IronPDF - 強大的 PDF 管理工具

了解更多關於IronPDF的信息這是一個庫,允許開發者在 C# 中創建、閱讀和編輯 PDF 文件。 無論是將 HTML 轉換為 PDF 還是透過 getters 和 setters 管理 PDF 中繼資料,IronPDF 都能滿足您的需求。

IronXL - Excel操作變得簡單

處理 Excel 文件時,IronXL Excel 庫簡化讀寫過程。 此工具可用於操作 Excel 文件的私有和公共字串或整數,類似於您可能在 C# 中使用相同語法處理類別中的資料時的取值器和設值器。

IronOCR - C# 中的光學字元識別

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

IronBarcode - 條碼讀寫庫

探索 IronBarcode 功能用於需要條碼讀取和寫入的應用程式。 它允許直接訪問條碼數據,並通過自動屬性進行自定義,就像在C#編程中使用的getter和setter一樣。

Iron Suite 和取值器與設值器

Iron Suite 套件無縫整合至 C# 開發,包括 getters 和 setters。 這些工具為任何 C# 專案增添價值。

結論

總結:

  1. Getter 和 Setter:它們幫助訪問和修改類的私有字段。

  2. 自動屬性:一種優雅的方法,透過自動實現屬性來擁有自動的獲取器和設置器。

  3. 存取修飾符:它們有助於微調屬性的可訪問性。

    到現在為止,您應該已經牢牢掌握了如何在C#中使用getter和setter。

    Iron Suite 的工具套件為 C# 開發人員提供了強大的功能。 每一款產品,包括 IronPDF、IronXL、IronOCR 和 IronBarcode,都附帶一個Iron Software 工具免費試用,讓您在不需要任何初期投資的情況下探索並整合這些強大的庫到您的專案中。

    當您準備好購買時,個人授權起價為$749。 如果您發現多個工具符合您的需求,您可以藉此機會以兩個單獨授權的價格購買完整的Iron Suite套件。

< 上一頁
C# 邏輯運算子(開發人員如何運作)
下一個 >
C# 字串分割(開發者應如何操作)

準備開始了嗎? 版本: 2024.12 剛剛發布

免費 NuGet 下載 總下載次數: 11,622,374 查看許可證 >