C# 属性:初学者的全面指南
你好,未来的编程巨星!今天,我们将踏上一段激动人心的旅程,探索 C# 属性的世界。别担心如果你之前从未写过一行代码——我会成为你的友好向导,我们将一步步解决这个问题。在本教程结束时,你将成为属性专家!
什么是属性?
在我们深入之前,让我们想象你有一个存钱罐。你可以把钱放进去,也可以把钱拿出来,但你不能直接访问存钱罐的内部。C# 中的属性工作原理类似——它们提供了一种访问和修改类中私有字段值的方式,同时仍然控制着这种访问是如何发生的。
为什么使用属性?
- 封装:它们帮助隐藏类的内部工作原理。
- 灵活性:你可以更改数据的存储方式,而不需要更改访问方式。
- 验证:你可以在设置数据之前添加检查,确保数据有效。
现在,让我们用一些代码来实践!
基本属性语法
下面是一个属性的最简单形式:
public class Person
{
private string name;
public string Name
{
get { return name; }
set { name = value; }
}
}
在这个例子中,Name
是我们的属性。它与私有字段 name
关联。get
和 set
部分称为访问器。
访问器
属性有两个主要的访问器:
- get:检索属性的值
- set:为属性分配新值
让我们分解我们的 Name
属性:
public string Name
{
get { return name; } // 这是获取器
set { name = value; } // 这是设置器
}
当你访问属性(例如 person.Name
)时,会调用获取器。当你分配一个值(例如 person.Name = "John"
)时,会调用设置器。
自动实现的属性
C# 为不需要任何特殊逻辑的简单属性提供了一个简写形式:
public class Person
{
public string Name { get; set; }
}
这会创建一个名为 Name
的属性,并有一个隐藏的后备字段,由 C# 管理为你。这就像魔法一样!
带有逻辑的属性
现在,让我们给我们的属性添加一些魔力:
public class BankAccount
{
private decimal balance;
public decimal Balance
{
get { return balance; }
set
{
if (value < 0)
{
throw new ArgumentException("余额不能为负");
}
balance = value;
}
}
}
在这里,我们确保余额永远不能为负。如果有人尝试设置一个负余额,我们会抛出一个异常。这就像为你的存钱罐配备了一个保镖!
只读和只写属性
有时,你可能想要限制对你的属性的访问:
public class SecretAgent
{
private string codeName = "007";
// 只读属性
public string CodeName
{
get { return codeName; }
}
// 只写属性
public string Mission
{
set { Console.WriteLine($"新任务:{value}"); }
}
}
詹姆斯·邦德会赞同这种保密级别的!
表达式体属性
对于简单属性,C# 6.0 引入了一种更简洁的语法:
public class Circle
{
public double Radius { get; set; }
// 使用表达式体的只读属性
public double Area => Math.PI * Radius * Radius;
}
=>
语法就像是在说 "这个属性由以下表达式定义"。它简短、甜蜜,而且充满数学气息!
抽象属性
在抽象类中,你可以定义抽象属性,派生类必须实现它们:
public abstract class Shape
{
public abstract double Area { get; }
}
public class Square : Shape
{
public double Side { get; set; }
public override double Area => Side * Side;
}
这就像为属性创建了一个蓝图,你的 "子" 类必须填写。
属性方法表
下面是一个属性相关方法的便捷表格:
方法 | 描述 | 示例 |
---|---|---|
get | 检索属性值 | get { return name; } |
set | 设置属性值 | set { name = value; } |
init | 仅在对象初始化时设置属性值 | public string Name { get; init; } |
value | 在设置器中表示被分配的值 | set { if (value != null) name = value; } |
结论
恭喜你!你已经迈出了进入 C# 属性世界的第一步。记住,属性就像是你的类的私有字段的训练有素的管家——它们管理访问,执行规则,并保持整洁。
在你继续编程之旅时,你会发现属性无处不在。它们是编写干净、可维护的 C# 代码的重要组成部分。继续练习,很快你就能像专业人士一样使用属性!
快乐编程,愿你的属性总是得到妥善保护!?????
Credits: Image by storyset