在实际环境中测试
在生产中测试无水印。
随时随地为您服务。
Getters 和 setters 是 C# 等面向对象编程语言中的基本概念。 这两种方法允许我们控制类属性的访问和修改。 在本教程中,我们将使用代码块探索 C# 获取器和私有设置器的初级和中级方面。
就其核心而言,getters 和 setters 只不过是类中具有相同名称的方法。 getter 返回私有字段变量的值,而 setter 则修改其重要性。 这些方法可确保类的内部数据(领域)安全、正确地访问或修改。
想象一下,一个 "公共类汽车 "有一个 "私有字符串描述属性名称"。 如果这个班级以外的人想知道说明,他们不能直接访问,因为它是私有的。 这里就涉及到 getters 和 setters 的作用。
getter 允许用户检索 "私有字符串描述 "的值,但不允许用户直接修改该值。 另一方面,设置器可以让用户在我们设定的条件下修改隐式参数描述。
访问修饰符定义了字段或属性从类外部的可见性和可访问性级别。 最常用的修饰词是 "public "和 "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
在上面的 "类 Person "中,我们既有一个 getter(获取名称)和一名定线员(设置名称)name "属性的翻译。 当您运行 static void Main
方法时,它将打印 "John",因为我们已经使用 setter 为名称设置了该值。
现在,您可能会想:"我是否总是需要为 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
在 "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
在本例中,"Description "属性只能在 "Person "类的构造函数中设置,代码量较少。 译文一经确定,不得进行外部修改。
有时,您可能希望允许从类外部读取属性,但只能从类内部设置属性。 这可以通过 "私有集 "来实现。
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
在 "类 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
在本例中,"Student "类继承自 "Person",并覆盖了 "Name "属性的设置器。 它在设置名称之前添加了验证检查,确保名称不为空或空值。
Iron Suite 是一个研究工作工具集合,可显著提升 C# 开发能力。 其中包括 IronPDF、IronXL、IronOCR 和 IronBarcode。 每种工具都有其独特的作用,可以集成到 C# 的各个方面。
了解有关 IronPDF 的更多信息该工具是一个允许开发人员用 C# 创建、阅读和编辑 PDF 文档的库。 无论是将 HTML 转换为 PDF,还是通过获取器和设置器管理 PDF 元数据,IronPDF 都能帮您实现。
使用 Excel 文件时、IronXL.Excel 库简化读写过程。 该工具可用于操作 Excel 文件的私有和公用字符串或整数,类似于使用 C# 中的 getters 和 setters 的相同语法处理类内的数据。
探索IronOCR我们正在开发一个光学字符识别库,可将图像转化为可搜索的文本。 如果您的应用程序涉及从扫描文档中读取文本,IronOCR 的强大功能可以轻松集成。 它可以处理私有字段和公共字符串描述,就像您在前面示例设置中的类 Person 或类 Student 中期望的那样。
了解 IronBarcode 功能用于需要读写 BarCode 的应用程序。 它既可以直接访问 BarCode 数据,也可以通过自动属性进行自定义,就像 C# 编程中使用的 getters 和 setters 一样。
Iron Suite 软件包与 C# 开发无缝集成,包括 getters 和 setters。 这些工具可为任何 C# 项目增添价值。
总结如下
设定器和设置器:它们有助于访问和修改类的私有字段。
自动属性在自动实现属性的帮助下,拥有自动获取器和设置器的优雅方法。
访问修饰符":它们有助于微调属性的可访问性。
现在,您应该已经牢固掌握了如何在 C# 中使用获取器和设置器。
Iron Suite 的工具套件为 C# 开发人员提供了令人难以置信的功能。 包括 IronPDF、IronXL、IronOCR 和 IronBarcode 在内的每种产品都附带一个免费试用 Iron Software 工具此外,译文还应让您能够探索这些功能强大的库,并将其集成到您的项目中,而无需任何初始投资。
当您准备好提交时,单个许可证的起价为 $749。 如果您发现这些工具中不止一个符合您的需求,您可以利用这个机会,只需支付两个单独许可证的价格即可购买完整的 Iron Suite 软件包。