Sam*_*der 12 c# fxcop readonly immutability
我一直在阅读这个问题和其他一些答案,虽然我在更改引用和更改当前实例的状态之间有所区别,但我不确定为什么这意味着我不应该只读它.这是因为标记某些东西只是告诉编译器有关该实例的特殊内容,所以它能够将它当作线程安全处理时实际上可能不是吗?
据推测,有些情况下我不希望实例能够被更改,但是不介意实例的状态是否改变(单例可能./ me准备火焰)标记实例的后果是什么readonly如果我想要这个?
Noo*_*ilk 11
没有(基于运行时/环境)的后果.编译器不会吓坏,你的运行时不会爆炸,一切都会好起来的.
它只是FxCop(一些人使用的静态分析工具),对此有警告.警告的原因在您链接的线程中解释(从语义上讲,可能不清楚对象实际上并非"只读",只是该变量无法"重新分配").
就个人而言,我不同意这个规则,所以我只是禁用它(如果你正在运行FxCop并且它与你有关).
一个有趣的相关点:可变的只读结构是一个坏主意,因为像这样的情况:
http://ericlippert.com/2008/05/14/mutating-readonly-structs/
我显示此代码的大多数人都无法正确预测其输出.
可变的只读结构有一个问题,人们认为他们正在改变他们,但实际上他们正在改变副本.
可变的只读ref类型具有相反的问题.人们认为它们是不可改变的,但实际上它们只是浅薄不可变的.
我认为关键在于它可能会产生误导 - 一个粗心的读者可能会认为一个只读变量实际上是一个常数,它不会.
我会把它当作一个建议而不是一个规则 - 有些情况下它可能是合理的,但应谨慎使用.(特别是,如果可变状态暴露给外界,我会感到紧张.)
| 归档时间: |
|
| 查看次数: |
2294 次 |
| 最近记录: |