Jus*_*tin 2 .net c# struct properties value-type
我只是快速阅读了这篇文章(特别是关于他选择使用结构/字段而不是类/属性的原因)并看到了这一行:
属性的结果不是真正的l值,因此我们不能执行类似Vertex.Normal.dx = 0的操作.属性的链接会产生非常意外的结果.
他在谈论什么样的意外结果?
我想补充dbemerlin的答案,这里的关键是Rico的注释,属性不是"左值",或者,正如我们在C#中称之为"变量".
为了改变一个可变结构(理想情况下,你不应该;可变结构通常会导致比它们解决的更多问题),你需要改变一个变量.这是一个变量什么是 -一个存储位置,其内容改变.如果你有一个矢量类型的字段,你说
Foo.vector.x = 123;
Run Code Online (Sandbox Code Playgroud)
然后我们有一个值类型的变量 - 字段Foo.vector - 因此我们可以改变它的属性x.但是如果你有一个值类型的属性:
Foo.Vector.x = 123;
Run Code Online (Sandbox Code Playgroud)
该属性不是变量.这相当于
Vector v = Foo.Vector;
v.x = 123;
Run Code Online (Sandbox Code Playgroud)
它会改变临时变量v,而不是任何支持该属性的存储位置.
如果放弃可变值类型,整个问题就会消失.要更改x,请使用新值创建一个新向量并替换整个内容:
Foo.Vector = new Vector(x, Foo.Vector.y);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
669 次 |
| 最近记录: |