C# 设置目标

C# 设置目标,c#,C#,get set的唯一目标是访问私有/受保护的变量,而不破坏封装的概念吗? 因为根据我的发现,我看不到get set属性的任何其他用途。另一个用途是可以使用自定义逻辑。例如,在设置变量时,可以检查以确保它在边界内 例如,如果您有一个带有分子和分母的类分数,则在设置分母时,您需要检查它是否为零。否-这通常是它所做的,但是访问者可以执行您想要的任何计算。从根本上说,属性旨在提供对值的逻辑状态的访问,但该逻辑状态不必转换为实现中相同类型的单个字段 例如,我的野田佳彦时间项目有一个LocalDate类型,

get set的唯一目标是访问私有/受保护的变量,而不破坏封装的概念吗?
因为根据我的发现,我看不到get set属性的任何其他用途。

另一个用途是可以使用自定义逻辑。例如,在设置变量时,可以检查以确保它在边界内

例如,如果您有一个带有分子和分母的类分数,则在设置分母时,您需要检查它是否为零。

否-这通常是它所做的,但是访问者可以执行您想要的任何计算。从根本上说,属性旨在提供对值的逻辑状态的访问,但该逻辑状态不必转换为实现中相同类型的单个字段

例如,我的野田佳彦时间项目有一个
LocalDate
类型,属性为
Year
Month
Day
。在v1中,
LocalDate
的支持字段是一个
LocalDateTime
,它本身有一个支持字段,表示自Unix纪元以来的刻度数,并根据该字段计算年/月/日

在v2中,有一个完全不同的实现,一个支持字段将年/月/日值打包到一个
字段中,但所需的计算量要少得多

调用方不需要知道有任何更改,但在这两个版本中,getter都不只是返回backing字段的值。对他们隐藏了实现细节


同时具有getter和setter的属性更有可能由一个简单的字段来支持,但是在这里,setter可以很好地执行验证检查,getter也可能很懒。

您不仅在回答和键入方面非常出色。3分钟12行;)通过从
属性
而不是
方法
调用中获取值,有什么区别吗?像
public int day{get{return\u day;}}
public int day(){return\u day;}
?@Bharadwaj:基本上,调用方法的属性更令人愉快。但归根结底,一个属性只是一个或两个方法,通过元数据将它们连接起来。除了
performance
之外,与
performance
相比还有什么优势吗?@Bharadwaj:没有-正如我所说,属性只是方法,为什么它们比方法更快?