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

C# 为什么在属性声明中只使用setter?,c#,.net,C#,.net,在属性上只使用setter的想法是什么?如果我们将一个属性设置为某个值,我猜它很可能在某个点读取该值?您通常不会创建这样的属性。正如你所说,它没有多大价值 如果您确实希望只允许设置某个值而不读取该值,请提供一个方法。这更干净。只写属性在基类库中很少见,但这只是一个例子。基于该主题中的安全说明,我认为省略了get访问器是为了防止部分受信任的代码访问或篡改默认解析器 并且可能是出于同样的原因而只写的属性 (奇怪的是,它也是一个只写属性,但这似乎不是一个好的设计。) 按照上面的例子,如果读写属性没有意

在属性上只使用setter的想法是什么?如果我们将一个属性设置为某个值,我猜它很可能在某个点读取该值?

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


如果您确实希望只允许设置某个值而不读取该值,请提供一个方法。这更干净。

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

并且可能是出于同样的原因而只写的属性

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

按照上面的例子,如果读写属性没有意义,但是出于安全原因,您不需要get访问器,那么我建议您应该使用只写属性only


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

中通常所做的一样,只有setter的auto属性没有多大意义。有一个手动实现的属性,只有一个setter可以设置一个内部使用但外部不可见的字段,这是有意义的

拥有一个仅限集合的属性是非常少见的,并且通常使用集合方法而不是属性来实现,因为对于大多数开发人员来说,仅限集合的属性不是预期的行为


事实上,对于自动实现的属性来说,在没有
get
的情况下定义
set
是一个编译器错误。只能手动定义set属性。

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

实际上不太可能。这个编译吗??这将是毫无意义的…这可能只是
接口的一部分,在其当前形式下,它不会以其他方式编译。也许如果我使用此属性来设置另一个对象的属性?@DTs:您是否真的在某处看到此用法,或者从理论上进行查询?我看不出这个构造有什么用处,但如果你正在研究现有的代码,那么上下文的更多细节可能会教给我们一些新的东西。但这不是一个自动实现的属性,而是一个手动实现的属性,它允许值在某个作用域中更改可见状态。@Servy:我假设OP只是说明一个没有公共或受保护的get访问器的属性。例如,这就是MSDN库记录我的示例的方式:
publicXMLResolver XmlResolver{set;}
。自动属性必须同时定义get和set访问器。@Servy自动实现的属性不能只有setter,它们必须有某种getter。尝试仅使用setter编译自动实现的属性。。。
int MyProperty { set; }