C# 属性访问器
介绍
在C#中,属性(Property)是一种特殊的类成员,它允许我们以更灵活的方式访问和修改类的私有字段。属性通常由两个访问器组成:get
和 set
。get
访问器用于读取属性的值,而 set
访问器用于设置属性的值。通过使用属性访问器,我们可以在访问或修改字段时添加额外的逻辑,例如验证或计算。
基本语法
一个典型的C#属性定义如下:
public class Person
{
private string name;
public string Name
{
get { return name; }
set { name = value; }
}
}
在这个例子中,Name
是一个属性,它封装了私有字段 name
。get
访问器返回 name
的值,而 set
访问器将传入的值赋给 name
。
自动实现的属性
C#还支持自动实现的属性,这样可以简化代码。自动实现的属性不需要显式定义私有字段,编译器会自动生成一个隐藏的字段。
public class Person
{
public string Name { get; set; }
}
在这个例子中,Name
属性会自动生成一个隐藏的私有字段,并且 get
和 set
访问器的逻辑也是自动生成的。
只读和只写属性
我们可以通过省略 set
或 get
访问器来创建只读或只写属性。
只读属性
public class Person
{
private string name = "John";
public string Name
{
get { return name; }
}
}
在这个例子中,Name
是一个只读属性,因为它只有 get
访问器,没有 set
访问器。
只写属性
public class Person
{
private string name;
public string Name
{
set { name = value; }
}
}
在这个例子中,Name
是一个只写属性,因为它只有 set
访问器,没有 get
访问器。
访问器中的逻辑
属性访问器不仅可以简单地读取或设置字段的值,还可以包含额外的逻辑。例如,我们可以在 set
访问器中添加验证逻辑。
public class Person
{
private int age;
public int Age
{
get { return age; }
set
{
if (value < 0)
{
throw new ArgumentException("Age cannot be negative");
}
age = value;
}
}
}
在这个例子中,Age
属性的 set
访问器会检查传入的值是否为负数。如果是负数,则会抛出一个异常。
实际应用场景
数据验证
属性访问器常用于数据验证。例如,在用户注册时,我们可以使用属性访问器来确保用户输入的年龄是有效的。
public class User
{
private int age;
public int Age
{
get { return age; }
set
{
if (value < 0 || value > 120)
{
throw new ArgumentException("Invalid age");
}
age = value;
}
}
}
计算属性
属性访问器还可以用于计算属性。例如,我们可以创建一个属性来计算一个人的出生年份。
public class Person
{
private int age;
public int Age
{
get { return age; }
set { age = value; }
}
public int BirthYear
{
get { return DateTime.Now.Year - age; }
}
}
在这个例子中,BirthYear
属性会根据当前年份和年龄计算出出生年份。
总结
C#属性访问器提供了一种灵活的方式来访问和修改类的私有字段。通过使用 get
和 set
访问器,我们可以在访问或修改字段时添加额外的逻辑,例如验证或计算。自动实现的属性进一步简化了代码,使得属性的定义更加简洁。
附加资源
练习
- 创建一个
Student
类,包含Name
和Grade
属性。确保Grade
属性的值在 0 到 100 之间。 - 修改
Student
类,添加一个Passed
属性,该属性根据Grade
的值返回true
或false
(假设及格分数为 60)。