内封装引用类型的我声明一类具有几个特性集合
class Soil
{
public double AnglePhi { get; set; }
public double AngleDelta { get; set; }
.
.
.
}
现在操纵它们的集合,我又建了专用类,只有这个原因。
class Soils
{
private const Byte numberOPredefined = 10;
private IList<Soil> soils;
public Soil this[ushort i]
{
get { return new Soil() { AngleDelta = soils[i].AngleDelta, ... }; }
set { if (i > numberOPredefined) soils[i] = value; }
}
.
.
.
}
这个逻辑背后的逻辑是保护一些不受直接操纵每个土壤实例的属性。在吸气剂中给一个副本,要求在吸气器中有一个“完整的”土壤物体。
从我红迄今为止,其他的解决方案可能是:
化妆土类不可变的,
回报只读目录(但随后引用类型inseide进行操作)
转土类结构(简单) ,
增强土类与一些逻辑(方法等)。
我想问一下,上述“解决方案”是否有任何价值,或者是不明确的。
这是一个典型的情况,我认为,例如有一个引用类型的集合,并且想要封装他们。在这些情况下,典型的思维框架是什么?
编辑:
好了,看完答案后,我修改了解决这个
class Soil
{
private readonly double _AnglePhi;
public double AnglePhi { get { return _AnglePhi; } }
private readonly double _AngleDelta;
public double AngleDelta { get { return _AngleDelta; } }
.
.
}
class SoilCollection
{
private List<Soil> _Soils;
public IList<Soil> Soils { get { return _Soils.AsReadOnly(); } }
.
.
}
我觉得它里面的土类所需要的逻辑,而不是内部另一个类。如果我发现任何缺点,我会发布。
您的意思是ValueObject这个链接解释? http://blogs.msdn.com/b/lucabol/archive/2007/12/03/creating-an-immutable-value-object-in-c-part-i-using-a-class.aspx – 2011-01-21 09:50:51
那么,我没有阅读整篇文章,但是根据标题“YES”,价值对象是基于其状态的对象,而不是它们在内存中的指针。不可变的值对象是一个不能改变的值对象。修改它的状态,你必须创建新的。“ – 2011-01-21 10:02:35
你对课程的命名是正确的。 – 2011-01-21 10:31:16