0
int MyProperty { set; }

仅在属性上使用 setter 的想法是什么?如果我们为某个属性设置某个值,我想它很可能会在某个时候读取该值?

4

4 回答 4

1

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

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

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

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

您当然可以使用Set方法来代替,但属性的优点是它可以在对象初始化器中使用,就像通常使用XmlReaderSettings.

于 2013-03-06T16:30:46.307 回答
0

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

如果你真的想只允许设置某个值而不读取它,那么提供一个方法。这样更干净。

于 2013-03-06T16:28:53.740 回答
0

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

具有仅设置属性非常少见,并且通常使用设置方法而不是属性来实现,因为对于大多数开发人员来说,仅设置属性不是预期的行为。

实际上,自动实现的属性定义 aset而没有 a是编译器错误get必须手动定义仅设置属性。

于 2013-03-06T16:31:26.860 回答
0

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

于 2013-03-06T16:39:09.860 回答