【发布时间】:2011-03-21 20:06:39
【问题描述】:
在 C# 中,我有一个简单的 3D 矢量类。
static void Main(string[] args)
{
Vector3D a, b;
a = new Vector3D(0, 5, 10);
b = new Vector3D(0, 0, 0);
b = a;
a.x = 10;
Console.WriteLine("vector a=" + a.ToString());
Console.WriteLine("vector b=" + b.ToString());
Console.ReadKey();
}
输出是,
向量 a= 10, 5, 10
向量 b= 10, 5, 10
我在将 a.x 更改为 10 之前分配了 a。所以我期待
向量 a= 10, 5, 10
向量 b= 0, 5, 10
据我了解,= 运算符会像指针一样分配对对象的引用? 在 C# 中,我不能重载 = 运算符。
我必须手动分配每个属性吗?
【问题讨论】:
-
这里的最佳做法是创建一个 不可变 类型,无论是引用类型还是值类型,都无关紧要。向量在逻辑上是值。当您将四添加到十二时,您不会在逻辑上将两者“变异”为六并保持相同!你完全创造了一个全新的数字。同样,当您更改向量的 x 坐标时,您不会更改 x 坐标并保持 y 和 z 相同:您创建了一个全新的向量。您会发现,如果您将值视为值而不是可变状态,则您能够更好地推理向量数学。