猿问

C#中的引用类型

考虑以下代码:


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; }

}

显然,当分配person1给person2且Name属性person2更改时,Nameof person1也将更改。person1并person2具有相同的参考。


为什么在时person2 = null,person1变量也不会为null?


慕容3067478
浏览 560回答 3
3回答

守候你守候我

这两个person和person2是引用,同一个对象。但是这些是不同的参考。所以当你跑步时person2 = null;您仅更改reference person2,而reference person和相应的对象保持不变。我猜想最好的解释方法是简化图示。这是以前 的情况person2 = null如您所见,在第二张图片上person2没有引用任何内容(或者null严格来说,因为没有引用和引用null是不同的条件,请参见Rune FS的注释),同时person仍引用现有对象。

宝慕林4294392

您已更改person2为引用null,但person1此处未引用。我的意思是,如果我们看一下person2,并person1指派那么这两个引用相同的对象之前。然后,您指定person2 = null,因此第2个人现在引用的是其他类型。它没有删除person2引用的对象。
随时随地看视频慕课网APP
我要回答