.NET 帮助

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

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

获取器和设置器简介

什么是 Getters 和 Setters?

就其核心而言,getters 和 setters 只不过是类中具有相同名称的方法。 getter 返回私有字段变量的值,而 setter 则修改其重要性。 这些方法确保一个类的内部数据(字段)被安全且正确地访问或修改。

我们为什么需要它们?

想象一下有一个public class car,其中包含一个private string description property name。 如果这个班级以外的人想知道说明,他们不能直接访问,因为它是私有的。 这里就涉及到 getters 和 setters 的作用。

getter可以让用户在不直接访问修改的情况下检索private string description的值。 另一方面,设置器可以让用户在我们设定的条件下修改隐式参数描述。

访问修饰符

访问修饰符定义了字段或属性从类外部的可见性和可访问性级别。 最常用的修饰符是publicprivate

  • Public:声明为public的字段或属性可以从程序中的任何地方访问。 例如,您可能有一个 public int age 属性,可以由代码的任何部分访问和修改。
  • 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
$vbLabelText   $csharpLabel

在上述class Person中,name属性具有一个获取器 (GetName) 和一个设置器 (SetName)。 当您运行static void Main方法时,它将打印“John”,因为我们已使用setter为名称设置了该值。

自动执行属性

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

在C#中,您可以使用自动属性,它为您提供了声明private字段及其关联属性的简便方法。 这里有一个例子:

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

Student``class中,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
$vbLabelText   $csharpLabel

在此示例中,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
$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 属性的设置器。 它在设置名称之前添加了验证检查,确保名称不为空或空值。

介绍Iron Suite以增强您的C#开发

Iron Suite 是一个研究工作工具集合,可显著提升 C# 开发能力。 其中包括 IronPDF、IronXL、IronOCR 和 IronBarcode。 每种工具都有其独特的作用,可以集成到 C# 的各个方面。

IronPDF - 强大的 PDF 管理工具

了解更多关于IronPDF的信息,这是一个允许开发人员在C#中创建、读取和编辑PDF文档的库。 无论是将 HTML 转换为 PDF,还是通过获取器和设置器管理 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文件时,IronXL Excel Library 简化了读取和写入过程。 该工具可用于操作 Excel 文件的私有和公用字符串或整数,类似于使用 C# 中的 getters 和 setters 的相同语法处理类内的数据。

IronOCR - C#中的光学字符识别

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

IronBarcode - 条码读写库

发现 IronBarcode 功能,适用于需要条形码读取和写入的应用程序。 它既可以直接访问 BarCode 数据,也可以通过自动属性进行自定义,就像 C# 编程中使用的 getters 和 setters 一样。

Iron Suite 和 Getters and Setters

Iron Suite 软件包与 C# 开发无缝集成,包括 getters 和 setters。 这些工具可为任何 C# 项目增添价值。

结论

总结如下

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

  2. 自动属性:一种优雅的方法,通过自动实现的属性来自动生成 getter 和 setter。

  3. 访问修饰符:它们帮助细化属性的可访问性。

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

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

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

Chipego
软件工程师
Chipego 拥有出色的倾听技巧,这帮助他理解客户问题并提供智能解决方案。他在 2023 年加入 Iron Software 团队,此前他获得了信息技术学士学位。IronPDF 和 IronOCR 是 Chipego 主要专注的两个产品,但他对所有产品的了解每天都在增长,因为他不断找到支持客户的新方法。他喜欢 Iron Software 的合作氛围,公司各地的团队成员贡献他们丰富的经验,以提供有效的创新解决方案。当 Chipego 离开办公桌时,你经常可以发现他在看书或踢足球。
< 前一页
C# 逻辑运算符(开发人员如何使用)
下一步 >
C# 分割字符串(开发人员如何使用)