c# - 在定义变量的类中使用 getter 和 setter?

标签 c# java

我一直在阅读有关 getter 和 setter 的内容,我有一个问题。访问声明变量的类中的变量时是否应该使用 getter 和 setter?这里似乎不需要 getter 和 setter,因为变量是私有(private)的并不重要,声明它的类总是可以访问它......?

或者 getter 和 setter 是否只应在外部类想要访问这些变量时使用?

最佳答案

虽然该语言不要求您这样做,但在访问通过 getter 和 setter 公开的私有(private)字段时,最好使用 getter 和 setter。在某些情况下,我什至会说,即使对于尚未直接公开的内部属性,使用它们也是有意义的。

这样做是一个很好的做法,因为它将读取和修改私有(private)字段的代码隔离为一组方法。这样您以后就可以提供额外的验证,甚至可以更改属性在内部存储的方式,而无需更改太多位置。

更改的一个示例可能是一个类,它通过 getter(访问器)/setter(修改器)方法公开最初存储为该类中的私有(private)字段的某个属性。后来您意识到您需要为该属性使用不同的存储库 - 可能从文件或数据库等中读取它。此时,如果您仅使用方法来访问和修改属性,您可以简单地更改实现更改的访问器和修改器方法的代码。

另一个例子是扩展类时的实例。它提供了更好的封装。

即使对于测试来说,抽象对逻辑属性的私有(private)“存储库”的访问也是有意义的。

注意:我指的是您公开为类的属性的私有(private)成员的概念,尽管 Java 不一定这样引用它们。

最后,我对使用方法而不是直接访问私有(private)成员的建议的强调不过分:建议。许多人认为这是很好的做法,因此我建议您遵循,但如果您有充分的理由不遵循,请务必不要遵循!

关于c# - 在定义变量的类中使用 getter 和 setter?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9638318/

相关文章:

C# 子类还是接口(interface)?

java - 限制 JSP-Servlet 中的角色

java - 运行 Optaplanner 项目作业调度示例但得到不同的结果

c# - 如果 UseSpaStaticFiles() 应该服务于 Angular 页面,为什么仍然需要 UseSpa()?

c# - Linux 单声道 C# 错误 : Cannot open assembly 'Bovine.csproj' : File does not contain a valid CIL image

c# - 在 Avalon Dock 中,如何以编程方式隐藏 LayoutDocumentPane 项目并恢复它们

c# - 在提示用户提及缺少的实体后,我如何使用 luis 操作绑定(bind)来触发意图

google-bigquery - 在 java bigquery API 中使用标准 SQL 查询

java - 为 Jersey 注册上下文监听器

java - RxJava : How to handle events in multiple threads