为什么在属性声明中只使用setter?

int MyProperty { set; } 

在物业上只使用二传手的想法是什么? 如果我们设置一个具有某个值的属性,我想它很可能在某个时候读取这个值?

只写属性在基类库中很少见,但XmlReaderSettings.XmlResolver就是一个例子。 根据该主题中的安全说明,我认为省略了get访问器以防止部分受信任的代码访问或篡改默认解析程序。

出于同样的原因, XmlResolver.Credentials和XmlTextReader.XmlResolver可能是只写属性。

(奇怪的是, XmlAttribute.InnerText也是一个只写属性,但这似乎不是一个好的设计。)

按照上面的例子,我会说只有当读写属性有意义时才应该使用只写属性,但出于安全原因你不需要get访问器。

当然,您可以使用Set方法,但属性的优点是可以在对象初始值设定项中使用,就像通常使用XmlReaderSettings

您通常不会创建这样的属性。 正如你所说,它没有多大价值。

如果您确实只想在不读取的情况下设置某个值,那么请提供一种方法。 那更干净了。

拥有一个只有setter的auto-property并没有多大意义。 有一个手动实现的属性只有一个setter可以设置一个内部使用的字段,但外部不可见。

具有set only属性非常罕见,并且通常使用set方法而不是属性来实现,因为对于大多数开发人员而言,set-only属性不是预期的行为。

实际上,对于自动实现的属性来说,定义没有getset是一个编译器错误。 必须手动定义仅设置属性。

一个方法比’只写属性’更有意义 – 即使代码确实编译了。 关于写只有属性这里有一个有趣的讨论