我经常发现自己编写 getter 和 setter 只是因为获取和设置需要不同的访问级别。而那些getter和setter是微不足道的(getter只返回,setter只设置值,里面没有其他代码)。当您希望字段值对外部世界只读时的典型情况(并且您为每个字段编写了一大堆 getter 函数。)
Getter 和 setter 是底层的函数。调用函数比设置字段要慢,因为您需要复制参数、推送和弹出堆栈帧、复制结果等。
好吧,编译器可能会优化函数调用并内联赋值,但这是您无法控制的事情。甚至 c++ 中的 inline 关键字也只是一个提示,编译器可以随意忽略它。您应该假设调用了一个函数并且它会变慢。
此外,从来没有语言(如 C#)支持属性并模仿这个东西,但它们只不过是看起来像一个字段的函数,你甚至无法分辨它是一个函数还是一个字段(没有 IDE 的帮助)。
如果我们可以为写入和读取设置不同的访问修饰符(例如像文件系统那样),而不只是告诉它会违反封装的教条原则,会出现什么问题?