在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();
}
Run Code Online (Sandbox Code Playgroud)
输出是,
矢量a = 10,5,10
矢量b = 10,5,10
在我将斧头改为10之前我分配了一个.所以我在期待
矢量a = 10,5,10
矢量b = 0,5,10
根据我的理解=运算符像指针一样分配对象的引用?在C#中我不能超载=运算符.
我必须手动分配每个属性吗?
Hen*_*man 10
是的,因为Vecor3D是一个类,这是非常正确的.
类是引用类型,您的b = a;语句不会复制Vector3D实例,而是复制对实例的引用.
如果你想"克隆"实例,你可以添加IClonable接口,但这或多或少被放弃了.
<X,Y,Z>类型的更好解决方案可能是使其成为结构.结构是值类型,意义b = a;会改变(朝向你想要的).
3D点符合结构的所有条件(小,无身份).首选方法是将其设计为不可变的.