C#advantage中的属性

C#advantage中的属性,c#,properties,getter-setter,C#,Properties,Getter Setter,虽然我理解属性的基本概念,比如提供对私有数据成员的读写访问,但我仍然很难理解它比仅仅将成员声明为公共成员更有用。在什么情况下它有用?如果这是一种改变私有字段值的方法,那么封装仍然是如何实施的呢 如果可以的话,请用一个例子或链接进行解释我认为在属性与字段、私有与私有(与内部)方面存在一些混淆 字段非常类似于类的普通变量。它们可以是公共的,也可以是私人的。 与字段一样,属性也可以是公共的或私有的。然而,虽然它们的行为看起来类似于字段,但实际上它们的行为更像具有特定签名的函数(签名是setter接受属

虽然我理解属性的基本概念,比如提供对私有数据成员的读写访问,但我仍然很难理解它比仅仅将成员声明为公共成员更有用。在什么情况下它有用?如果这是一种改变私有字段值的方法,那么封装仍然是如何实施的呢


如果可以的话,请用一个例子或链接进行解释

我认为在属性与字段、私有与私有(与内部)方面存在一些混淆

字段非常类似于类的普通变量。它们可以是公共的,也可以是私人的。
与字段一样,属性也可以是公共的或私有的。然而,虽然它们的行为看起来类似于字段,但实际上它们的行为更像具有特定签名的函数(签名是setter接受属性类型的单个参数,getter不接受参数并返回该类型)。因为它们的行为类似于函数,所以无论何时设置或检索属性的值,都可以运行任意代码来实现该行为(即缓存值,如果缓存为空,则从某处检索值)。

根据个人经验:

当您不希望通过调用包含私有数据成员的类的另一个类从外部访问数据成员时,您通常会拥有私有数据成员

Public数据成员是可以由其他类访问以获取其内容的成员

我的观点是,这只是正确的编程语法。私有数据成员通常是那些您不希望在设置后覆盖的常量,而公共数据成员是类似代数的变量,在必要时可以被覆盖

类似的问题已在以下网址提出: .

干杯


iato

这听起来像是应该参加考试的……1。
get
set
功能不仅仅是获取或设置一个私有字段。2.有时,框架需要使用属性:例如,WPF绑定在字段上不起作用。
如果你不知道如何使用google,请用示例或链接解释一下?比如,尽可能地选择潜在的重复项:,,等等……我不明白这是如何回答这个问题的。问题是为什么使用属性而不是字段是有利的。这个答案及其链接的答案是关于使用
public
private
访问修饰符。它们完全不同。这个答案甚至没有提到字段或属性,只是一般的“数据成员”。