nuovo.matriceが同じオブジェクトを参照していて、メソッドによって行われた配列の再割り当てを維持しない場合、MessageBoxが "false"と表示される理由を理解できません。 nuovo.matrice == matが同じオブジェクトを参照すると、なぜfalseですか?なぜオブジェクトへの参照が維持されないのですか?
namespace WindowsFormsApplication15
{パブリック部分クラスをForm1:フォーム {公共の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;
}
}
}
}
あなたは他の人があなたを理解し、あなたのコードを読むことができる、あなたのクラス 'lol'と' asd'命名停止、特にクラス名の小文字を使用したい場合。意味のある名前を使用し、共通のコーディングガイドラインに従ってください。私にとっては、これだけで私は助けようとはしませんでした。 –
短い答え:ここでは 'matrice = newMatrice;'あなたの 'Form1_Load'に' mat'にリンクされた配列を再作成しません。参照が2つの異なるオブジェクトを指すように、参照を再割り当てします。 –
私はクラス名を変更します、申し訳ありません。 – CRK