Menu
CoddyTech

字段与属性的区别

本课属于 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; }
    }
}

字段通常是私有的,通过属性访问。属性允许你添加逻辑和验证,并控制数据的访问或修改方式。如果不需要额外的逻辑,自动实现的属性会很方便。

challenge icon

挑战

中等

创建一个 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}");
    }
}
quiz icon自我测试

这节课包含一个小测验。开始学习即可作答,并记录你的进度。

面向对象编程中的所有课

自己练习: C# 在线编译器