私はこのトリッキーな問題に遭遇しました。次のコードを参照してください。
public class Foo
public int A { get; set; }
}
static void Main(string[] args)
{
Foo foo1 = new Foo();
Foo foo2 = new Foo();
ChangeObject1(foo1);
ChangeObject2(ref foo2);
Console.WriteLine("Foo1 = " + foo1.A);
Console.WriteLine("Foo2 = " + foo2.A);
Console.ReadKey();
}
static void ChangeObject1(Foo foo)
{
foo.A += 1;
foo = new Foo();
}
static void ChangeObject2(ref Foo foo)
{
foo.A += 1;
foo = new Foo();
}
いくつかのテストの後、foo1.Aは1に等しく、foo2.Aはまだ0に等しいです。私の理解では、これは2番目のメソッドが値ではなく参照によって渡されるインスタンスを持っているためです。これによりインスタンスのコンテンツが変更されるため、メソッドで新しいオブジェクトが作成および割り当てられると、値は定義されなくなります。
しかし、インスタンスのコンテンツがメソッドの外部で変更されているため、値が渡されたとしても、最初のメソッドでも同様の効果があるはずだと思うので、それについて考えると混乱します。
誰かが実際に何が起こっているのか知っていますか?ありがとう!