get set 的唯一目标是在不破坏封装概念的情况下访问私有(private)/ protected 变量吗? 因为根据我的发现,我看不到 get set 属性的任何其他用途。
最佳答案
不 - 这是通常它所做的,但访问器可以执行您想要的任何计算。从根本上说,属性旨在提供对值的逻辑状态的访问 - 但该逻辑状态不必在实现中转换为相同类型的单个字段>.
例如,我的 Noda Time 项目有一个 LocalDate
类型,其属性为 Year
、Month
和 Day
。在 v1 中,LocalDate
的支持字段是一个 LocalDateTime
,它本身有一个表示自 Unix 纪元以来的滴答数的支持字段,并且计算了年/月/日从那开始。
在 v2 中,有一个完全不同的实现方式,支持字段将年/月/日值打包到单个 long
字段中,但所需的计算要少得多。
调用者不需要知道有任何变化,但在两个版本中,getter 只是返回支持字段的值。他们隐藏了实现细节。
具有 getter 和 setter 的属性更有可能由一个简单的字段支持 - 但在那里,setter 可能会很好地执行验证检查,而 getter 也可能是惰性的。
关于c# - Get Set 的目标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27937186/