属性

引言

属性是什么?

属性是 对字段进行封装的访问入口,可以理解为给字段加了一扇安全门

为什么需要属性?

如果直接公开字段:

public int age;

别人可以随便改:

age = -100; // 神人的年龄是负数的

明显不合理。

而我们的属性则可以控制

  • 是否允许读取
  • 是否允许修改
  • 是否进行校验

属性的基本写法

public int Age { get; set; }

这是最常见的写法。

等价于:

private int age;

public int Age
{
    get { return age; }
    set { age = value; }
}

get 和 set 是什么?

get

表示:

读取数据


set

表示:

修改数据

其中:

value = 要设置的新值

属性可以做校验

private int age;

public int Age
{
    get { return age; }
    set
    {
        if (value >= 0)
            age = value;
    }
}

这样就不会出现负年龄。

只读 / 只写属性

只读

public int Age { get; }

只写(很少见)

public int Age { set; }

字段 vs 属性区别

项目 字段 属性
是否封装
是否可控制
是否推荐公开

常见误区

❌ 属性会占更多内存

不会,本质仍是字段。

❌ get/set 是函数

不是,是访问器。

总结

属性 = 给字段提供安全访问的封装机制