我有时会使用{get;在c#中设置;}我被告知有时我正在使用的技术需要它们(linq2sql?)
我想知道为什么有时某项技术可能需要带有getter和setter的私有字段(因此速记是一个很好的捷径)而不是公共字段。
我知道在getter或setter中使用逻辑是有道理的,但在空的那些方面却不太确定?
这个帖子的答案是否相同,如果是这样,请告诉我!
What is exactly the point of auto-generating getters/setters for object fields in Scala?
答案 0 :(得分:2)
重点是,将私有成员暴露给您的类用户是不好的封装。通过使用属性,您可以以允许您在不更改接口的情况下更改该值的内部实现或存储的方式公开信息。
E.g。如果您决定将整数存储为字节以在内部保存内存,则必须重新编译所有调用代码。即使您拥有所有源代码,这也很不方便,但如果您的代码我们是其他人正在使用的库,则会非常不方便。
另一个常见的例子是,如果值发生变化,您稍后可能希望引发事件。
其他原因是某些客户可能会通过反射查找属性,但不会查找成员字段 - 例如,表单编辑器和属性网格都会这样做。
此外,您可以将属性设为虚拟,而无法使用字段。
或者从另一个角度来看,你可以想到什么原因来使用属性。
答案 1 :(得分:1)
一个原因是继承,因为您的链接已经指出
我能想到的另一个好处是,您可以通过public getter
公开属性来读取属性。你不能用字段
public String ReadOnlyString {get; private set;}