.NET 帮助

C# Getter Setter(开发者如何使用)

发布 2023年八月29日
分享:

Getters 和 setters 是 C# 等面向对象编程语言中的基本概念。通过这两种方法,我们可以控制类属性的访问和修改。在本教程中,我们将使用代码块探索 C# 获取器和私有设置器的初级和中级知识。

获取器和设置器简介

Getters 和 Setters 是什么?

就其核心而言,获取器和设置器只不过是类中同名的方法而已。getter 返回私有字段变量的值,而 setter 则修改它的重要性。这些方法确保类的内部数据 (领域) 安全、正确地访问或修改。

[Why do we need them?

想象一下,一个 "公共类汽车 "有一个 "私有字符串描述属性名"。如果这个类之外的人想知道描述,他们不能直接访问它,因为它是私有的。这就是 getters 和 setters 的作用。

getter 允许用户检索 "私有字符串描述 "的值,但不允许用户直接修改它。另一方面,setter 可以让用户在我们设定的条件下修改隐式参数描述。

访问修改器

访问修饰符定义了字段或属性在类外的可见性和可访问性。最常用的修饰符是 "public "和 "private"。

  • 公用声明为 "public "的字段或属性可以在程序的任何地方被访问。例如,您可能有一个 public int age 属性,代码的任何部分都可以访问和修改它。
  • 私有声明为私有的属性或字段只能在定义的类中访问,例如 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#

在上面的 "类 Person "中,我们既有一个 getter (获取名称) 和一名定线员 (设置名称) name "属性的值。当你运行 static void Main 方法时,它会打印 "John",因为我们已经使用 setter 设置了 name 的值。

自动执行属性

现在,你可能会想:"我是否总是需要为 getter 和 setter 编写单独的方法?答案是 "不需要"。C# 引入了一个名为 "自动实现属性 "或 "自动属性 "的概念来简化这一过程。

在 C# 中,您可以使用自动属性,它为您提供了声明 "私有字段 "及其关联属性的速记方法。下面是一个例子:

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 "类中,"Name "属性是一个自动实现的getter和setter。C# 编译器会在幕后创建一个 private string name 字段,而 Name 属性提供了对该字段的访问。

属性中的高级访问修改器

只读属性

有时,你可能需要提供一个可以读取但不能从外部修改的属性。这时,只读属性就派上用场了。您可以省略属性中的设置器,使其成为只读属性。

比方说,我们想在我们的 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 Setters

有时,您可能希望允许从类外读取属性,但只能在类内设置。这可以使用 "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#

在 "类 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 "属性的设置器。它在设置 name 之前添加了一个验证检查,以确保它不是空的或 null。

介绍 Iron Suite 以增强 C# 开发能力

Iron Suite 是一系列研究工具,可显著提高 C# 开发能力。它包括 IronPDF、IronXL、IronOCR 和 IronBarcode。这些工具各具特色,可以集成到 C# 的各个方面。

IronPDF - 功能强大的 PDF 管理工具

铁PDF 是一个允许开发人员用 C# 创建、阅读和编辑 PDF 文档的库。无论是使用 HTML 转 PDF 教程 或通过获取器和设置器管理 PDF 元数据,IronPDF 都能满足您的需求。

IronXL - Excel 操作变得简单

在处理 Excel 文件时 铁XL 简化了读写过程。该工具可用于操作 Excel 文件的私有和公用字符串或整数,类似于在 C# 中使用相同的 getters 和 setters 语法处理类中的数据。

IronOCR - C&num 中的光学字符识别;

IronOCR 是一个光学字符识别库,可将图像转化为可搜索文本。如果您的应用程序涉及从扫描文档中读取文本,IronOCR 的强大功能可以轻松集成。它可以处理私有字段和公共字符串描述,就像您在前面示例设置中的 Person 类或 Student 类中所期望的那样。

IronBarcode - 条码读写库

IronBarcode 是需要读写条码的应用程序的重要工具。它既可直接访问条码数据,也可通过自动属性进行自定义,就像 C# 编程中使用的 getters 和 setters 一样。

铁套件、获取器和设置器

Iron Suite 软件包与 C# 开发无缝集成,包括获取器和设置器。这些工具为任何 C# 项目增添了价值。

结论

总而言之

1.Getter 和 Setter":它们有助于访问和修改类的私有字段。

2.自动属性在自动实现的属性的帮助下,一种优雅的自动获取器和设置器的方法。

3.访问修饰符:它们有助于微调属性的可访问性。

至此,你应该已经牢固掌握了如何在 C# 中使用获取器和设置器。

Iron Suite 工具套件为 C# 开发人员提供了令人难以置信的功能。包括 IronPDF、IronXL、IronOCR 和 IronBarcode 在内的每一款产品都附带一个 免费试用您无需进行任何初始投资,即可探索这些功能强大的库,并将其集成到您的项目中。

当您准备投入时,个人许可证的起价为 $749。如果您发现这些工具中不止一个适合您的需求,您可以利用这个机会购买完整的 Iron Suite 软件包,而只需支付两个单独许可证的价格。

< 前一页
C# 逻辑运算符(开发人员如何使用)
下一步 >
C# 分割字符串(开发人员如何使用)

准备开始了吗? 版本: 2024.9 刚刚发布

免费NuGet下载 总下载量: 10,731,156 查看许可证 >