【发布时间】:2013-12-20 19:02:01
【问题描述】:
我按照这种模式编写了大量不可变类型:
class A
{
private readonly SomeType b;
public A(SomeType b)
{
this.b = b;
}
public SomeType B
{
get {return b; }
}
}
是否可以使用自动属性复制此模式?我能达到的收盘价是:
class A
{
public A(SomeType b)
{
B = b;
}
public SomeType B
{
get; private set;
}
}
但这并不令人满意,因为它不能保证对 B 的引用不会改变(我们实际上丢失了readonly)。有没有可能做得比这更好?
【问题讨论】:
-
不使用自动属性,除了
readonly或const之外,C# 中没有其他关键字可以强制执行不变性。你能做的最好的事情就是阻止外部的改变,而不是从内部强制改变。 Roslyn 将来可能会通过检查代码的更改来提供帮助,但默认情况下这不是内置的。