欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 健康 > 养生 > C#小课堂:访问器的访问修饰符,如何玩转封装?

C#小课堂:访问器的访问修饰符,如何玩转封装?

2025/5/30 11:14:58 来源:https://blog.csdn.net/weixin_42291376/article/details/148218071  浏览:    关键词:C#小课堂:访问器的访问修饰符,如何玩转封装?

——掌握访问器权限控制,代码更安全!

📌 核心规则速览

在C#中,属性和索引器的 get 和 set 访问器可以有不同的访问级别,但需遵循以下规则:

  • 必须成对存在
    只有同时包含 get 和 set 的成员(属性/索引器)才能为访问器单独设置修饰符。
  • 仅限一个修饰符

两个访问器中,只能有一个 设置访问修饰符,另一个默认与成员本身的访问级别一致。

  • 更严格的限制
    访问器的修饰符必须比成员的整体访问级别 更严格。例如:
  • 成员为 public → 访问器可用 internal/protected/private
  • 成员为 protected → 访问器只能为 private

🛠 经典应用场景

场景:允许外部读取,禁止外部修改
通过将 set 设为 private,实现“只读属性”的效果:

class Person
{public string Name { get; private set; }  // 外部可读,仅内部可写public Person(string name) => Name = name;
}// 使用示例
var p = new Person("Alice");
Console.WriteLine(p.Name);  // 允许
p.Name = "Bob";             // 编译错误!无法外部修改

🔍 为什么需要这样做?

  • 封装性
    隐藏内部数据修改逻辑,防止外部随意篡改。
  • 安全性
    关键数据(如用户ID)通过私有 set 保护,避免非法赋值。
  • 灵活性

可在 private set 中添加验证逻辑,确保数据合法性。

❗ 常见误区

错误1:两个访问器都加修饰符

public string Name { get; public set; } // 编译错误!

错误2:修饰符不够严格

protected int Age { get; internal set; } // 错误!internal 比 protected 宽松 

📊 访问级别严格性排序

  • 从宽松到严格:
    public → internal → protected → protected internal → private

记住口诀:

“成员权限是天花板,访问器只能向下钻”

💡 实战建议

优先使用自动属性

{ get; private set; } 写法简洁,避免手动实现字段。

结合构造函数初始化

通过构造方法强制赋初值,确保对象状态有效。

单元测试中的技巧

若需测试私有 set 逻辑,可用 [InternalsVisibleTo] 向测试程序集暴露内部成员。

掌握访问器修饰符的权限控制,能让你的代码更健壮、更安全!下次写属性时,不妨试试 private set,感受封装的魅力吧! 🚀

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词