我声明了一个具有多个属性的类
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; }
}
.
.
.
}
这背后的逻辑是在某种程度上保护每个土壤实例的属性免受直接操作。在 getter 中提供一个副本,在 setter 中要求一个“完整”的土壤对象。
从我到目前为止的红色,其他解决方案可能是:
使 Soil 类不可变,
返回一个 ReadOnly List(但随后可以操纵内部的引用类型)
将 Soil 类转换为 struct(简单),
用一些逻辑(方法等)增加 Soil 类)。
我想问一下上述“解决方案”是否有任何价值,或者定义不明确。
这是我认为的典型情况,例如拥有一组引用类型并想要封装它们。在这些情况下,典型的思维框架是什么?
编辑:
好的,阅读答案后,我修改了解决方案
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(); } }
.
.
}
我认为 Soil 类需要它内部的逻辑,而不是另一个类。如果我发现任何缺点,我会发布。