当我在XNA中使用Matrix和Rectangle赋值时它是重复还是引用?

时间:2012-09-30 21:16:16

标签: c# matrix xna rectangles

我对XNA有疑问,我也是新手,在搜索谷歌后无法在文档中找到明确的答案。

问题1:

如果我这样做:

Rectangle afterMoveRect = collisionRectangle;
afterMoveRect.Offset((int)moveAmount.X, (int)moveAmount.Y);

我现在:

一个。 refference collisionRectangle与另一个名称,然后移动collisionRectangle

B中。创建了collisionRectangle的副本,只移动了副本。

第二个问题:

如果我这样做:

Matrix transform = localTransform;

transform = transform * otherTransform;

我是否创建了localTransform的副本并多次复制该副本,还是引用了localTransform并将其乘以另一个标识符?

两者的问题是一样的,我是否改变了原来的(可能是无意的)

问题3:

你怎么知道你是否更改了原件?您如何知道是否使用新名称引用原始名称(如在Java中)或在使用赋值运算符时创建其他对象的深层副本?

2 个答案:

答案 0 :(得分:1)

如果RectangleMatrixstructclass,则完全取决于此。

如果它是struct(值类型),它将被复制,您正在处理另一个实例。如果它是class(引用类型),它将被引用,您正在处理同一个对象。

根据msdn,RectangleMatrix都是结构,所以你正在处理副本。

答案 1 :(得分:1)

它被称为引用和值类型。当作为值给出时,不会创建引用类型(基本类),只指向引用,因此在该cas中,新名称的修改将影响原始名称。在值类型(结构)的情况下,副本完成,然后两个独立处理。

MatrixRectangle都是结构,它们被复制了。