c#=操作员问题

Kay*_*ano 6 c# operators

在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点符合结构的所有条件(小,无身份).首选方法是将其设计为不可变的.