我只是快速浏览了一下本文 http://blogs.msdn.com/ricom/archive/2006/09/07/745085.aspx(特别是关于为什么他选择使用结构/字段而不是类/属性)并看到这一行:
属性的结果不是真正的左值,因此我们不能执行 Vertex.Normal.dx = 0 之类的操作。属性的链接会产生非常意外的结果。
他所说的是什么样的意想不到的结果?
我想在 dbemerlin 的答案中补充一点,这里的关键是 Rico 的注释特性不是“左值”,或者我们在 C# 中所说的“变量”。
为了改变一个可变结构(理想情况下,你不应该这样做;可变结构通常会导致比它们解决的问题更多的问题),你需要改变一个variable。这就是变量is-- 内容发生变化的存储位置。如果你有一个向量类型的字段并且你说
Foo.vector.x = 123;
那么我们就有了一个值类型的变量——字段 Foo.vector——因此我们可以改变它的属性 x。但是如果你有一个值类型的属性:
Foo.Vector.x = 123;
the property不是变量。这相当于
Vector v = Foo.Vector;
v.x = 123;
它会改变临时变量 v,而不是支持该属性的任何存储位置。
如果放弃可变值类型,整个问题就会消失。要更改 x,请使用新值创建一个新向量并替换整个向量:
Foo.Vector = new Vector(x, Foo.Vector.y);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)