c#属性访问器
在c#中属性访问器是用于封装字段的方法,访问器分为get和set,用于获取和设置属性的值,通过属性访问器,开发人员可以控制如何读取和修改属性值,提供更好的封装性和数据验证。
1,基本的属性访问器
属性是通过get和set关键字定义的
Set访问器用于读取属性值
Get访问器用于设置属性值
例:
public class Person
{
private string name;
// 属性
public string Name
{
get
{
return name; // 获取值
}
set
{
name = value; // 设置值
}
}
}
Person person = new Person();
person.Name = "Alice"; // 调用 set 访问器
Console.WriteLine(person.Name); // 调用 get 访问器,输出: Alice
通过直接调用Name方法就可以获取或者设置name的值,这个就是属性访问器
2,自动实现的属性
C#还支持自动实现的属性,即不需要手动声明字段,编译器会自动为get和set生成一 个隐藏的字段
例:
public class Person
{
public string Name { get; set; } // 自动实现的属性
}
这等同于
public class Person
{
private string name; // 自动生成的字段
public string Name
{
get { return name; }
set { name = value; }
}
}
自动属性简化了代码,并且通常用于不需要复杂逻辑的属性
3,只读属性
如果只希望属性是只读的(即没有set访问器),可以只提供get访问器
例:
public class Person
{
private string name;
public string Name
{
get { return name; }
}
public Person(string name)
{
name = name;
}
}
Person person = new Person("Alice"); //构造函数赋值
Console.WriteLine(person.Name); // 输出: Alice
// person.Name = "Bob"; // 编译错误,Name 是只读的
4,只写属性
只提供set访问器
例:
public class Person
{
private string name;
public string Name
{
set { name = value; }
}
}
Person person = new Person();
person.Name = "Alice"; // 设置值
// Console.WriteLine(person.Name); // 编译错误,没有 get 访问器
5,计算属性
属性也可以用来返回一个计算值,而不是直接返回一个字段,计算属性可以用get访问 器实现
例:计算矩阵面积
public class Rectangle
{
public int Width { get; set; }
public int Height { get; set; }
// 计算属性
public int Area
{
get { return Width * Height; }
}
}
Rectangle rect = new Rectangle { Width = 5, Height = 10 };
Console.WriteLine(rect.Area); // 输出: 50 (5 * 10)
6,属性访问器中的代码逻辑
也可以在get或set访问器中添加逻辑,比如验证输入值,计算返回值,抛出异常等
例:验证设置的值
public class Person
{
private int age;
public int Age
{
get { return age; }
set
{
if (value < 0)
{
throw new ArgumentException("年龄不合法!");
}
age = value;
}
}
}
Person person = new Person();
person.Age = 25; // 正常设置
Console.WriteLine(person.Age); // 输出: 25
// person.Age = -5; // 抛出异常: Age cannot be negative.
在这个例子中,set访问器对传入的值进行验证,确保age永远不会为负数
原文地址:https://blog.csdn.net/qq_52905520/article/details/144809607
免责声明:本站文章内容转载自网络资源,如侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!