为什么它不维护对对象的引用

本文关键字:对象 引用 维护 为什么 | 更新日期: 2023-09-27 18:13:07

我不明白为什么MessageBox显示"false"如果新的。矩阵引用相同的对象,但不维护由该方法完成的数组重赋值。为什么诺沃。矩阵== mat是假的,如果他们指的是同一个对象?

namespace WindowsFormsApplication15

{公共部分类Form1: Form{公共Form1 (){InitializeComponent ();}

    class Class1
    {
        public ClassType[] matrice;
        public class ClassType
        {
            public string a { get; set; }
            public int b { get; set; }
        }
    }
    Class1.ClassType[] mat;

    private void Form1_Load(object sender, EventArgs e)
    {
        Class1 test = new Class1();
        Class1.ClassType prova = new Class1.ClassType();
        test.matrice = new Class1.ClassType[1];
        test.matrice[0] = prova;
        mat = test.matrice;
        mat[0].a = "rtuier";
        mat[0].b = 94;
        Modify nuovo = new Modify(mat);
        nuovo.inizia();
        MessageBox.Show((nuovo.matrice == mat).ToString());
    }
    class Modify
    {
        public Class1.ClassType[] matrice;
        public Modify(Class1.ClassType[] mat)
        {
            matrice = mat;
        }
        public void inizia()
        {
            matrice[0].a = "asuidh";
            matrice[0].b = 123;
            Class1.ClassType[] newMatrice = new Class1.ClassType[2];
            Class1.ClassType ins = new Class1.ClassType { a = "pollo", b = 456 };
            newMatrice[0] = matrice[0];
            newMatrice[1] = ins;
            matrice = newMatrice;
        }
    }
}

}

为什么它不维护对对象的引用

问题是,它们不引用同一个对象。因为您不能更改类中的mat变量。你得到了一份参考资料的副本,然后修改了副本。如果您希望能够修改引用,则应该将其包装在类中。然后您将获得包装器引用的副本,但是Class1字段是唯一的。

类换行示例:

public class ClassType
{
    public string a { get; set; }
    public int b { get; set; }
}
public class Class1
{
    public ClassType[] classType;
}
public class Wrapper
{
    public Class1 WrappedClass1;
}
public class Class2
{
    public Wrapper Wrapped;
    public Class2(Wrapper wrapper)
    {
        Wrapped = wrapper;
    }
    public void ChangeClass1()
    {
        WrappedClass1.WrappedClass1 = new Class1();
    }
}
Class1 class1 = new Class1();
Wrapper wrapper = new Wrapper();
wrapper.WrappedClass1 = class1;
Class2 class2 = new Class2(wrapper);
class2.ChangeClass1();
MessageBox.Show(wrapper.WrappedClass1 == class2.Wrapped.WrappedClass1); // <--- true