在C#中,我有一个简单的3D矢量类。c#=运算符问题
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
我分配之前我改变斧至10所以我期待
向量a = 10,5,10
矢量b = 0,5,10
从我理解的=运算符分配一个对象的引用像指针? 而在C#我无法超载=运营商。
我必须手动分配每个属性吗?
这里的最佳做法是使一个* immutable *类型(引用类型或值类型)无关紧要。向量是逻辑*值*。当你添加四到十二个时,你不会在逻辑上将这两个变成六个,并且保持相同!你完全创建一个全新的号码。同样,当您更改矢量的x坐标时,您不会更改x坐标并保持y和z相同:您创建一个全新的矢量。你会发现,如果将值作为值处理,而不是作为可变状态,则能更好地推理向量数学。 – 2010-07-27 22:16:57