将列表传递给构造函数然后存储它的惯例是什么?

时间:2013-08-08 15:01:26

标签: c# .net list

我们说我的代码是这样的:

    private IList<Vector3> vertices;
    private IList<uint> indices;

    public Mesh(IList<Vector3> vertices, IList<uint> indices)
    {
        // ???
    }

为了清楚起见,我想在构造函数中存储顶点和索引。我对C#的工作量不大,所以我不确定约定的外观。我是否应该复制整个列表,还是可以复制参考文献?惯例是什么?

5 个答案:

答案 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类是不可变的,那么你应该复制一些数据,以防止一些外部代码改变那些不可编辑的数据。

就个人而言,除非我有充分理由不这样做,否则我总是存储一份数据。