数组的封装,要不要深拷贝?

Encapsulation of arrays, should I deep copy?

A class 有一个私有 array/list。它被封装,只允许通过“AddElement”等方法进行编辑。

现在另一个 class 需要关于那个 array/list 的所有元素的信息。

传递 array/list 的引用会破坏封装。返回一个新的 array/list 但具有相同的对象仍然允许操作对象。创建深拷贝感觉有点矫枉过正。有没有更好的方法?

举个例子: 在游戏中,我有多个单位。要在小地图上放置标记,渲染器需要单位的位置和单位类型。渲染器应该不能改变单位的各种属性。

我在 C# 中执行此操作。

创建一个仅公开所需信息的新方法。类似于:

public (Point Position, string UnitType) GetUnitInfo()
{
    return _units.Select(u => (u.Position, u.UnitType));
}