跳至页脚内容
.NET 帮助

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

getter和setter是面向对象编程语言(如C#)中的基本概念。 这两种方法允许我们控制类属性的访问和修改。 在本教程中,我们将通过代码块探讨C# getter和私有setter的初学者和中级方面。

Getter和Setter简介

什么是Getter和Setter?

从本质上讲,getter和setter只是方法,使您可以访问类中的私有变量。 getter返回私有字段变量的值,而setter修改它。 这些方法确保类的内部数据(字段)被安全和正确地访问或修改。

为什么需要它们?

设想拥有一个公共类Car,其中有一个私有字符串描述属性。 如果有人想从这个类外部知道描述,他们无法直接访问它,因为它是私有的。 这就是getter和setter的作用。

getter允许用户获取私有字符串描述的值,而无需让他们直接修改它。 另一方面,setter让用户在我们设定的条件下修改描述。

访问修饰符

访问修饰符定义了字段或属性在类外部的可见性和可访问性级别。 最常用的修饰符是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设置了该名称的值。

自动实现的属性

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

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

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#编译器在幕后创建一个私有字符串名称字段,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,如报告、发票和文档。 利用对HTML文件、URL和原始HTML字符串的支持,IronPDF轻松生成高质量的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文件时,IronXL Excel Library简化了读取和写入过程。 此工具可用于操作Excel文件中的私有和公共字符串或整数,就像您在类中使用相同的语法在C#中使用getter和setter处理数据一样。

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

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

IronBarcode - 条形码读取和写入库

发现IronBarcode的功能,适用于需要条形码读取和写入的应用程序。 它允许直接访问条形码数据,并通过自动属性进行自定义,就像在C#编程中使用的getter和setter一样。

Iron Suite与Getter和Setter

Iron Suite包无缝集成到C#开发中,包括getter和setter。 这些工具为任何C#项目增值。

结论

总结:

  1. Getter和Setter:它们有助于访问和修改类的私有字段。
  2. 自动属性:一种优雅的方法,可以使用自动实现的属性提供自动getter和setter。
  3. 访问修饰符:它们有助于微调属性的可访问性。

到现在,您应该已经对如何在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。

可以使用哪些工具来增强 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 和 Iron Suite .NET 库在全球已获得超过 3000 万次的 NuGet 安装,其基础代码继续为全球使用的开发者工具提供支持。拥有 25 年商业经验和 41 年编程经验的 Jacob 仍专注于推动企业级 C#、Java 和 Python PDF 技术的创新,同时指导下一代技术领导者。