首页/ 第 5 章 · C# 编程基础/ 第 65 课
LESSON 65 · C# 编程基础

封装:public/private 与属性

封装已掌握。下一课学面向对象的第二个特性:继承。

⏱ 约 15 分钟📊 难度:入门🗂 第 5 章 · C# 编程基础📍 第 65 / 300 课
课程进度
65 / 300

🎯本节学习目标

  • 理解 public/private
  • 掌握属性的 get/set
  • 养成封装习惯

🚀课程导读

类的字段应该“谁能看、谁能改”要有规矩,这就是封装。它是面向对象的三大特性之一(封装、继承、多态)。

访问修饰符

控制“谁能访问”。

  1. 【public 公有】:任何地方都能访问(类外也能读写字段)。
  2. 【private 私有】:只有类内部能访问(类外不可见),默认权限。
  3. 【protected 受保护】:本类及子类可访问(继承时用,第 66 课)。
  4. 【internal】等:较少用,先忽略。
  5. 例:public int hp; // 外部可直接改;private int secret; // 外部不可见。
  6. 字段默认是 private(若没写修饰符,实际是 private)。
  7. 直接 public 字段的缺点:外部可以随意改成非法值(如血量负数)。
💡
原则:数据尽量 private,通过方法/属性提供受控访问,这叫“数据封装”。

属性 Property

“受控的门卫”。

  1. 属性用 get(取值)/ set(赋值)控制字段的访问逻辑。
  2. 语法:public int Hp { get { return hp; } set { hp = value; } }
  3. 【value】是 set 里系统给的“要赋的新值”。
  4. 只读属性:只写 get 不写 set(外部不能改)。
  5. 自动属性:public int Score { get; set; } 编译器自动生成隐藏字段。
  6. 【逻辑校验】:public int Hp { get { return hp; } set { hp = value < 0 ? 0 : value; } } // 防止负数
  7. 在 set 里可加限制、通知等逻辑,这是 public 字段做不到的。
  8. 使用:player.Hp = 50; int h = player.Hp; 用法与字段一样。
字段私有 + 属性公开 = 既安全又好用,是专业代码的标准写法。

Unity 实战

在脚本里运用封装。

  1. 新建脚本 EncapsulationDemo,定义:
  2. private int hp = 100;
  3. public int Hp { get { return hp; } set { hp = Mathf.Clamp(value, 0, 200); } }
  4. public bool IsDead { get { return hp <= 0; } } // 只读属性
  5. 在 Start 里测试:Hp = 500; Debug.Log(Hp); // 被限制为 200
  6. Hp = -50; Debug.Log(Hp); // 被限制为 0
  7. Debug.Log(IsDead); // True
  8. 播放观察:属性把值限制在合法范围。
  9. 体会封装的价值:外部无法破坏数据规则。
💡
Mathf.Clamp(value, min, max) 是 Unity 提供的“夹取”函数,把值限制在区间内,非常好用。

常见错误与排查

错误:类外访问 private 字段报错?
原因:私有字段外部不可见
解决:把字段改为 public 或通过 public 属性/方法访问。

动手练习

课后小任务(做出来才算真的学会)

  • 把字段设为 private,用属性控制读写
  • 给属性加一个值范围限制
  • 写一个只读属性(如 IsDead)

本节小结

封装已掌握。下一课学面向对象的第二个特性:继承。

完成打卡后,主站会实时更新你的学习进度 🎯

← 上一课构造函数 Constructor