【问题标题】:What is the point of empty getters and setters, and thus the point of auto generating getters and setters in c#空的getter和setter有什么意义,因此在c#中自动生成getter和setter有什么意义
【发布时间】:2012-03-04 18:41:33
【问题描述】:

我有时会使用 {get; set;} 在 c# 中,因为有人告诉我,有时我正在使用的技术需要它们(linq2sql?)

我想知道为什么有时一项技术可能需要一个带有 getter 和 setter 的私有字段(因此简写是一个很好的快捷方式)而不是一个公共字段。

我知道在 getter 或 setter 中包含逻辑是有道理的,但对于空的这一点不太确定?

答案和这篇文章一样吗,如果是,请告诉我!

What is exactly the point of auto-generating getters/setters for object fields in Scala?

【问题讨论】:

  • 同样的答案。它允许您稍后更改这些属性实现,而不会破坏任何其他使用它们的代码。你只是还不知道你是否需要这样做。
  • 那些库只是强迫你使用好的实践。这不难理解吧?
  • 我认为所有这些想法在旧式 API(常规旧 dll 和 sdk)中变得比在现代 LOB 应用程序中更相关。当属性被更改或删除时,我们仍然会修改大量文件。如果您在域周围设置了边界,则在 LOB 中;例如业务领域、数据访问等...,您最终会得到很多空的 setter 和 getter,由于上述所有原因,您永远不需要更改它们。这些理由在理论上是有效的。使用 C# 并没有那么糟糕,但是像 Java 和 C++ 这样的东西会使代码变得臃肿而且真的很痛。

标签: c# setter getter auto-generate


【解决方案1】:

一个原因是继承,因为您的链接已经指出

我能想到的另一个好处是,您可以通过public getter 公开属性来使属性只读。您不能对字段执行此操作

public String ReadOnlyString {get; private set;}

【讨论】:

    【解决方案2】:

    关键在于,将私有成员公开给类的用户是不好的封装。通过使用属性,您可以以一种允许您在不更改接口的情况下更改该值的内部实现或存储的方式公开信息。

    例如如果您决定将整数存储为字节以在内部节省内存,则必须重新编译所有调用代码。即使您拥有所有源代码,这也很不方便,但如果您的代码是别人正在使用的库,则非常不方便。

    另一个常见的例子是,如果值发生更改,您可能希望稍后引发事件。

    其他原因是某些客户端可能会通过反射查找属性,但不会查找成员字段 - 例如,表单编辑器和属性网格会这样做。

    此外,您可以将属性设为虚拟,这是字段无法做到的。

    或者换个角度来看,你能想到to_not_使用属性的原因是什么。

    【讨论】:

      猜你喜欢
      • 2010-11-30
      • 1970-01-01
      • 1970-01-01
      • 2014-04-18
      • 2022-10-17
      • 1970-01-01
      • 1970-01-01
      • 2023-03-26
      • 2012-08-01
      相关资源
      最近更新 更多