如果我有:
class Test
{
private Vector2 v;
public Vector2 Velocity
{
get { return v; }
set { v = value; }
}
}
Run Code Online (Sandbox Code Playgroud)
然后:
Test t = new Test();
t.Velocity = new Vector2(2, 2);
t.Velocity.Normalize();
Console.WriteLine(t.Velocity); // here not normalized
Vector2 tmp = t.Velocity;
tmp.Normalize();
t.Velocity = tmp;
Console.WriteLine(t.Velocity); // here normalized
Console.Read();
Run Code Online (Sandbox Code Playgroud)
为什么我直接尝试在属性Velocity上调用Normalize它没有规范化并且使用tmp Vector2它是?
PS Vector2是一个结构:
public struct Vector2 : IEquatable<Vector2>
{
public float X;
public float Y;
...
public void Normalize() {...}
}
Run Code Online (Sandbox Code Playgroud)
我想这个问题与实际上属性如何不相关.NET Framework,但是如何value types在.NET Framework中进行管理.
我使用CAD内核,即使从提供的代码中不清楚,我认为这Vector2是一个struct(通常是快速分配/渲染的加速),所以它是一个value type
当Normalize(...)值类型,你正常化复制它,这就是为什么在它的工作原理第二种情况下,导致第一你正常化副本,之后将其分配给原始值.
希望这可以帮助.
| 归档时间: |
|
| 查看次数: |
161 次 |
| 最近记录: |