我们说我的代码是这样的:
private IList<Vector3> vertices;
private IList<uint> indices;
public Mesh(IList<Vector3> vertices, IList<uint> indices)
{
// ???
}
为了清楚起见,我想在构造函数中存储顶点和索引。我对C#的工作量不大,所以我不确定约定的外观。我是否应该复制整个列表,还是可以复制参考文献?惯例是什么?
答案 0 :(得分:6)
这取决于意图。通常,您需要一个单独的副本,以便您可以控制函数内部列表的修改。这是关于封装的。
如果这不是你对这个课程的意图,那么只需存储对列表的引用就可以了。
答案 1 :(得分:4)
您只需将参考复制到列表即可。
由于您为成员变量和构造函数参数指定了相同的名称,因此您必须使用this
关键字。
private IList<Vector3> vertices;
private IList<uint> indices;
public Mesh(IList<Vector3> vertices, IList<uint> indices)
{
this.vertices = vertices;
this.indices = indices;
}
列表现在将存储在您的Mesh类
中答案 2 :(得分:1)
这取决于你需要什么。你可以简单地写
this.vertices = vertices;
这将存储对列表的引用。这意味着,外部所做的每项更改都会反映在您的列表中;
另一方面,您可以复制列表 -
this.vertices = new List<Vector3>(vertices);
这实际上会复制列表中的项目,您将看不到外部的更改。注意 - 复制的项目仍将是引用。对它们所做的任何更改都将反映在您的方法中。如果您愿意,您也可以复制它们以获取新列表。
再次 - 这取决于你需要什么。
答案 3 :(得分:0)
private IList<Vector3> vertices;
private IList<uint> indices;
public Mesh(IList<Vector3> vertices, IList<uint> indices)
{
this.vertices = vertices;
this.indices = indices;
}
如果您想在Mesh
内访问它,那么是的,您需要将它们放在那里。这通常如上所述。
答案 4 :(得分:0)
你应该小心这些事情。例如,如果你的Mesh类是不可变的,那么你应该复制一些数据,以防止一些外部代码改变那些不可编辑的数据。
就个人而言,除非我有充分理由不这样做,否则我总是存储一份数据。