如何在其他类中分配值

本文关键字:分配 其他 | 更新日期: 2023-09-27 18:00:36

我想创建一个aminator类。但是它不能修改其他类中的字段值。

这是我的简化动画师类:

public class PointMover
{
    Point point;
    public void Set(ref Point p)
    {
        point = p;
    }
    public void Move(int dX)
    {
        point.X += dX;  // The point.X is modified here.
    }
}

我的主要课程:

public partial class Form1 : Form
{
    PointMover pointMover = new PointMover();
    Point point = new Point(0, 0);
    private void Form1_Load(object sender, EventArgs e)
    {
        pointMover.Set(ref point);
        pointMover.Move(10); // But point.X is NOT modified here.
        this.Close();
    }
}

这是我的问题。有人知道怎么修吗?我将不胜感激。

如何在其他类中分配值

Point是一个结构体(即值类型)。您通过引用传递它,但随后通过将它分配给point字段在PointMover的构造函数中创建点实例的副本:

public void Set(ref Point p)
{
    point = p; // here you create copy of passed point
}

因此,point的修改不会影响p(因为它们代表不同的结构实例)。

注意:如果Point是一个引用类型(即类),则此赋值将复制一个引用,并且两个变量都将引用堆中的同一实例。


为了修复这种行为,您需要修改通过引用传递的点,而不创建副本。例如

public static void Move(ref Point point, int dX)
{
    point.X += dX; 
}

用法:

PointMover.Move(ref point, 20);

或者您可以简单地使用Point.Offset(int dx, int dy)方法。