1. ホーム
  2. c#

C#の参照型

2023-08-14 23:15:32

質問

このコードを考えてみましょう。

public class Program
{
    private static void Main(string[] args)
    {
        var person1 = new Person { Name = "Test" };
        Console.WriteLine(person1.Name);

        Person person2 = person1;
        person2.Name = "Shahrooz";
        Console.WriteLine(person1.Name); //Output: Shahrooz
        person2 = null;
        Console.WriteLine(person1.Name); //Output: Shahrooz
    }
}

public class Person
{
    public string Name { get; set; }
}

当然ながら person1person2 とし Name のプロパティは person2 が変更されると Nameperson1 も変更されます。 person1person2 は同じ参照を持っています。

なぜ person2 = null は、その person1 変数も null にならないのでしょうか?

どのように解決するのですか?

どちらも personperson2 を参照してください。 であり、同じオブジェクトへの参照です。しかし、これらは異なる参照です。そのため

person2 = null;

を変更するのは参照のみです。 person2 を残し、参照 person と対応するオブジェクトは変更されません。

これを説明するには、簡略化した図解が一番だと思います。以下は、この状況がどのようなものであったかを示しています。 以前 person2 = null :

<イグ

そして、これがその写真です。 の後、ヌル代入をしたところです。

ご覧のように、2枚目の写真では person2 は何も参照しない(あるいは null への参照は何も参照しないので、厳密に言えば null への参照は異なる条件であるため、厳密には ルーンFS を参照)、一方 person はまだ既存のオブジェクトを参照しています。