C# 中的属性优势
Properties in C# advantage
虽然我了解属性的基本概念,例如提供对私有数据成员的读取、读写访问,但我仍然很难理解将成员声明为 public 有何用处.在什么场景下有用?如果它是一种改变私有字段值的方法,那么封装是如何被强制执行的?
请举例说明或link如果可以
我认为属性与字段、私有与私有(与内部)存在一些混淆
字段非常类似于 class 的普通变量。它们可以是 public 或私人的。
属性,就像字段一样,也可以是 public 或私有的。然而,虽然它们的行为看起来类似于一个字段,但它们实际上更像是具有特定签名的函数(签名是 setter 采用 属性 类型的单个参数,并且 getter 不带参数并返回该类型)。因为它们的行为就像一个函数,无论何时设置或检索 属性 的值,您都可以 运行 任意代码来实现该行为(即缓存值,如果缓存为空,则从某处检索值).
根据个人经验:
当您不希望通过另一个调用包含 Private 的 class 的 class 从外部访问它时,您通常会拥有 Private 数据成员数据成员.
Public 数据成员是那些您可以通过其他 classes 访问以获取其内容的数据成员。
我的看法是它只是正确的编程语法。私有数据成员通常是那些一旦设置就不想覆盖的常量,而 Public 是类似代数的变量,必要时会被覆盖。
类似的问题已被问到:
What is the difference between Public, Private, Protected, and Nothing?。
干杯,
亚托
虽然我了解属性的基本概念,例如提供对私有数据成员的读取、读写访问,但我仍然很难理解将成员声明为 public 有何用处.在什么场景下有用?如果它是一种改变私有字段值的方法,那么封装是如何被强制执行的?
请举例说明或link如果可以
我认为属性与字段、私有与私有(与内部)存在一些混淆
字段非常类似于 class 的普通变量。它们可以是 public 或私人的。 属性,就像字段一样,也可以是 public 或私有的。然而,虽然它们的行为看起来类似于一个字段,但它们实际上更像是具有特定签名的函数(签名是 setter 采用 属性 类型的单个参数,并且 getter 不带参数并返回该类型)。因为它们的行为就像一个函数,无论何时设置或检索 属性 的值,您都可以 运行 任意代码来实现该行为(即缓存值,如果缓存为空,则从某处检索值).
根据个人经验:
当您不希望通过另一个调用包含 Private 的 class 的 class 从外部访问它时,您通常会拥有 Private 数据成员数据成员.
Public 数据成员是那些您可以通过其他 classes 访问以获取其内容的数据成员。
我的看法是它只是正确的编程语法。私有数据成员通常是那些一旦设置就不想覆盖的常量,而 Public 是类似代数的变量,必要时会被覆盖。
类似的问题已被问到: What is the difference between Public, Private, Protected, and Nothing?。
干杯,
亚托