第三十三式:C# 属性 (守门人)

绝世
秘籍
冲儿,之前我们为了保护数据(封装),把变量设为 private,然后写两个方法 SetAgeGetAge
这太麻烦了!C# 有一种更优雅的招式,叫属性 (Property)
听起来像是给变量请了个看门的?

1. 语法 - 智能门卫

属性看起来像变量,用起来也像变量,但实际上它背后是两个方法(get 和 set)。


class Hero
{
    private int _age; // 私有字段(后台老板)

    public int Age // 公开属性(前台经理)
    {
        get { return _age; } // 读的时候
        set 
        { 
            if (value < 0) value = 0; // 可以在这里加逻辑!防止年龄变成负数
            _age = value; 
        }
    }
}
        

2. 自动属性 - 懒人招式

如果你不需要在 get/set 里写逻辑,只是单纯地存取,可以简写:


public string Name { get; set; } // 编译器会自动帮你生成那个私有字段
        

3. 只读属性 - 铁公鸡

只写 get,不写 set。


public string Sect { get; } = "华山派"; // 只能读,不能改
        
这是 C# 最伟大的发明之一!
在 Java 里你得写一堆 getter/setter 方法,在 C# 里只需要一个属性就搞定。
切记:公开数据用属性,私有数据用字段。这是江湖铁律!
🚪

动手时刻:内力限制

创建一个 Master 类,有一个属性 MP(内力)。

要求:在 set 里做判断,如果赋值超过 100,就强制设为 100(因为经脉承受不住)。

查看参考答案

class Master
{
    private int _mp;

    public int MP
    {
        get { return _mp; }
        set
        {
            if (value > 100)
                _mp = 100;
            else
                _mp = value;
        }
    }
}
                    

成就解锁:【守门员】 获得:门禁卡