0

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

问题一:

如果我这样做:

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

我现在是否:

A. 用另一个名字引用collisionRectangle,然后移动collisionRectangle

或者

B. 创建了碰撞矩形的副本并且只移动了副本。

第二个问题:

如果我这样做:

Matrix transform = localTransform;

transform = transform * otherTransform;

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

两者的问题是相同的,我是否更改了原件(可能是无意的)

问题 3:

你怎么知道你是否改变了原来的?在使用赋值运算符时,如何知道是使用新名称(如 Java)引用原始对象还是创建另一个对象的深层副本?

4

2 回答 2

1

完全取决于RectangleorMatrix是 astruct还是 a class

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

根据 msdn,RectangleMatrix都是结构,因此您正在处理副本。

于 2012-09-30T21:19:32.130 回答
1

它被称为引用类型和值类型。引用类型(基本上是类)在作为值给出时不会创建,仅指向引用,因此在这种情况下,新名称的修改将影响原始名称。在值类型(结构)的情况下,复制完成,之后两者独立处理。

Matrix和都是Rectangle结构,它们被复制了。

于 2012-09-30T21:19:33.550 回答