我在很多地方都看到过公开字段不是个好主意,因为如果以后想要改成属性,你必须重新编译使用你的类的所有代码。
然而,在不可变类的情况下,我不明白为什么你需要改成属性 - 毕竟你不会添加“set”中的逻辑。
对此有任何想法吗?我有什么遗漏吗?
以下是针对那些更容易阅读代码而非文本的人的区别示例:
//Immutable Tuple using public readonly fields
public class Tuple<T1,T2>
{
public readonly T1 Item1;
public readonly T2 Item2;
public Tuple(T1 item1, T2 item2)
{
Item1 = item1;
Item2 = item2;
}
}
//Immutable Tuple using public properties and private readonly fields
public class Tuple<T1,T2>
{
private readonly T1 _Item1;
private readonly T2 _Item2;
public Tuple(T1 item1, T2 item2)
{
_Item1 = item1;
_Item2 = item2;
}
public T1 Item1 { get { return _Item1; } }
public T2 Item2 { get { return _Item2; } }
}
当然,你可以使用自动属性(public T1 Item1 { get; private set; }
),但这仅仅能够获得“约定的不可变性”而不是“保证的不可变性”...