int MyProperty { set; }
在财产上只使用setter的想法是什么?如果我们设置一个具有某个值的属性,我想它很可能在某个时候读取这个值?
答案 0 :(得分:1)
只读属性在基类库中很少见,但XmlReaderSettings.XmlResolver就是一个例子。根据该主题中的安全说明,我认为省略了get访问器以防止部分受信任的代码访问或篡改默认解析器。
由于同样的原因,XmlResolver.Credentials和XmlTextReader.XmlResolver可能是只写属性。
(奇怪的是,XmlAttribute.InnerText也是一个只写属性,但这似乎不是一个好的设计。)
按照上面的例子,我会说你应该使用只读属性 ,否则读写属性会有意义,但是你不需要get访问器来保证安全性的原因。
您当然可以使用Set
方法,但属性的优势在于它可以在对象初始值设定项中使用,就像通常使用XmlReaderSettings
一样。
答案 1 :(得分:0)
您通常不会创建这样的属性。如你所说,它没有多大价值。
如果您确实只想在不读取的情况下设置某个值,请提供方法。那更干净。
答案 2 :(得分:0)
拥有一个只有setter的auto-property并没有多大意义。拥有一个只有一个setter的手动实现的属性是有意义的,然后可以设置一个内部使用的字段,但外部不可见。
拥有set only属性非常罕见,并且通常使用set方法而不是属性实现,因为对于大多数开发人员而言,set-only属性不是预期的行为。
实际上,自动实现的属性在没有set
的情况下定义get
是一个编译器错误。必须手动定义仅限设置属性。
答案 3 :(得分:0)
一个方法比'只写属性'更有意义 - 即使代码编译了。关于写作权限Here
,有一个有趣的讨论