【发布时间】:2010-02-12 06:10:18
【问题描述】:
我在很多地方读到公开公开字段不是一个好主意,因为如果你以后想要更改属性,你将不得不重新编译所有使用你的类的代码。
但是,在不可变类的情况下,我不明白您为什么需要更改属性 - 毕竟您不会向“集合”添加逻辑。
对此有什么想法,我错过了什么吗?
差异示例,对于那些阅读代码比阅读文本更容易的人:)
//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; }),但这只会让您“同意不变性”而不是“保证不变性”...
【问题讨论】:
标签: c# properties field immutability