1 回答
TA贡献1860条经验 获得超8个赞
编辑:
OP被误以为是一个新实例,因为它没有在复制构造函数中克隆,而是被简单地分配了,因此Block被引出了一个实例,因此导致两个唯一的实例引用同一个实例。List<Block>List<Rectangle>BlockList<Rectangle>
在这种情况下,正确的副本构造函数将是:
public Block(Block originalBlock)
{
this._block = new List<Rectangle>(originalBlock.block);
this._blockNum = originalBlock.blockNum;
}
在Rectangle类中需要类似的复制构造函数。
这应该为您工作:
public class Block
{
private List<Rectangle> _block;
public List<Rectangle> block
{
get { return _block; }
}
private int _blockNum;
public int blockNum
{
get { return _blockNum; }
}
// Copy constructor
public Block(Block originalBlock)
{
// IMPORTANT: This does not create a new List<Rectangle>! See EDIT
this._block = originalBlock.block;
this._blockNum = originalBlock.blockNum;
}
}
用法:
Block originalBlock = new Block();
// Returns a new instance of Block with similar member data.
Block copiedBlock = new Block(originalBlock);
- 1 回答
- 0 关注
- 132 浏览
添加回答
举报