字段与属性的区别
本课属于 Coddy C# 学习旅程的“面向对象编程”单元。第 6 课,共 70 课。
字段是在类中直接声明的变量。属性是通过 get 和 set 访问器来受控访问字段的成员。
字段直接存储数据
public class Person
{
// 字段:直接存储变量
private string name;
private int age;
}属性通过 get 和 set 提供受控访问
public class Person
{
private string name;
// 带有后备字段的属性
public string Name
{
get { return name; }
set { name = value; }
}
}自动实现的属性(简写)
public class Person
{
// 自动实现的属性
public string Name { get; set; }
public int Age { get; set; }
}属性可以包含验证逻辑
public class Person
{
private int age;
public int Age
{
get { return age; }
set
{
if (value >= 0 && value <= 120)
age = value;
}
}
}只读属性(只有 get 访问器)
public class Circle
{
private double radius;
public double Radius
{
get { return radius; }
}
// 只读的计算属性
public double Area
{
get { return Math.PI * radius * radius; }
}
}字段通常是私有的,通过属性访问。属性允许你添加逻辑和验证,并控制数据的访问或修改方式。如果不需要额外的逻辑,自动实现的属性会很方便。
挑战
中等创建一个 BankAccount 类,演示字段和属性之间的区别:
- 使用私有
balance字段存储账户余额 - 自动实现的属性
AccountName - 只读属性
Balance,用于返回 balance 字段 Deposit和Withdraw方法,用于修改私有字段
亲手试试
using System;
class Program
{
static void Main()
{
string accountName = Console.ReadLine();
decimal initialBalance = decimal.Parse(Console.ReadLine());
decimal depositAmount = decimal.Parse(Console.ReadLine());
BankAccount account = new BankAccount(accountName, initialBalance);
Console.WriteLine($"Account: {account.AccountName}");
Console.WriteLine($"Initial Balance: ${account.Balance}");
account.Deposit(depositAmount);
Console.WriteLine($"After Deposit: ${account.Balance}");
string result = account.Withdraw(2000);
Console.WriteLine($"Withdraw attempt: {result}");
Console.WriteLine($"Final Balance: ${account.Balance}");
}
}这节课包含一个小测验。开始学习即可作答,并记录你的进度。
面向对象编程中的所有课
自己练习: C# 在线编译器