在 Java 中,final
意味着一个变量只能被分配一次,但该分配可以发生在程序的任何地方。在 C# 中,readonly
意味着只能在构造函数中分配字段,而 IMO 的用处明显减少。
众所周知,C# 深受 Java 设计的影响,但这种差异一直让我感到非常奇怪。有谁知道 CLR 中是否有技术原因导致 C#readonly
与 Java 的行为不太有用final
?
编辑:
回应评论;我想指出,我很清楚不变性的好处,而且我到处都在使用它。我认为readonly
它不如 Java 有用,因为:
public class Foo
{
private readonly int _bar;
Foo()
{
_bar = 5;
}
}
糟糕,我实际上需要在辅助方法中初始化该值!
public class Foo
{
private readonly int _bar;
Foo()
{
initialize()
}
private void initialize()
{
_bar = 5; //Can't compile because of semantics of readonly
}
}