2010-07-29 45 views

回答

26

除了性能差异外,我认为最大的好处是您可以提供有用的信息,了解变量的用途和用途(编辑:当其他人接管维护时,这更具价值你的代码...)

另外,正如你所说,它可以防止某人覆盖你的意思是一个恒定的价值。我认为这是足够的理由...

28

readonly仅用于防止任何人意外或故意在设置变量后更改变量的值。它在运行时执行。

const是类似的,但在编译时执行。因此,必须在创建变量时设置该值。

其中任何一个都可以与其他修饰符结合使用,例如public,privatestatic

+0

我读过的一些描述'只读'和你的似乎不同。你确定它是正确的吗?我是一个Java人,但从我读过的内容来看,'readonly'只能防止在构造函数或声明之外重新分配引用。你写的东西听起来很像Java的'final'。 – Vlasec 2015-02-19 09:09:08

8

A readonly字段只能在字段初始化或在构造函数中设置。这为持续维护提供了相当大的好处,因为您可以确定它是在创建对象时设置的,而不是自此以后更改为其他对象。没有性能优势。

一般而言,您不应将可变类型的字段标记为只读,因为对象本身可以随后进行修改。 FxCop为此定义了警告规则 - http://msdn.microsoft.com/en-us/library/ms182302(v=vs.120).aspx

+4

对象可以修改,如果它是一个可变的引用类型。项目可以添加到声明为readonly的列表中。 – 2010-07-29 18:08:09

+2

您不应该因为这个原因声明只读可变引用类型:http://msdn.microsoft.com/en-us/library/ms182302%28VS.80%29.aspx。但要提出一个好点。 – 2010-07-30 07:58:34

+4

@DavidNeale:即使对象的各种属性可能发生变化,但知道引用类型字段总是指向同一对象通常是非常有用的信息。除此之外,在任何给定的抽象层次上,当只有一个可变级别时比在两个或多个可变级别时更容易维护线程安全(这是一个很重要的原因'List '不是线程安全的,即使对于其中'T'是引用类型的添加式场景) - 它拥有对可变数组的可变引用。 – supercat 2012-02-27 22:05:37

2

明确的目的和用法似乎是使用readonly的最佳理由。虽然你可以争辩说,你可以留下写作,因为它尚未得到保护,也不需要。

2

只要记住,而裁判不能为只读改变,如果对象是可变对象的状态仍然可以改变(即添加到列表中的项目)