c# - 对对象中的引用感到困惑

标签 c#

我对对象关系真的很困惑! 我有两个类 Person 和 Address。以下是详细信息:

 public class Person
    {
        public string FirstName { get; set; }
        public string LastName { get; set; }

        private List<Address> _addresses = new List<Address>(); 

        public void AddAddress(Address address)
        {
            _addresses.Add(address);
            address.Person = this; 
        }

        public List<Address> Addresses  
        {
            get { return _addresses; }
            set { _addresses = value; }
        }
    }

  public class Address
    {
        public string Street { get; set; }


        public Person Person
        {
            get; set;
        }
    }

Person 类中的 AddAddress 方法将地址添加到 Addresses 集合中,并为 Address 对象设置 Person。现在,在代码中我执行以下操作:

var person = new Person() { FirstName = "John", LastName = "Doe" };
            person.AddAddress(new Address() { Street = "Blah Blah" });

            person.Addresses[0].Person = null; 

我认为它应该将 person 对象设置为 null,因为 Addresses[0].Person 指向原始的 person 对象。但它没有将其设置为空。这里发生了什么?

最佳答案

What is going on here?

简单说明:

变量(在本例中为“Person”)保存对象的引用。在引擎盖下,这只是一个数字。当您将它分配给 null 时,您所做的只是停止该变量指向该对象。对象本身仍然存在。

-- 编辑

了解其工作原理的一种方法是站在您的计算机附近并指向它。你现在是一个变量,你的电脑是一个对象。现在停止指着电脑(放下你的 ARM )。现在你是一个被赋值为 null 的变量。计算机仍然存在,没有任何改变,唯一的区别是你现在不再指向它。

关于c# - 对对象中的引用感到困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1337875/

相关文章:

c# - 我可以简化这段代码吗?如果是这样的话

c# - 我的 Azure DocumentDB 文档类是否应该继承自 Microsoft.Azure.Documents.Document?

c# - 枢轴应用程序 (WP7) 中的动画控制

C# 从交错数组中获取不同的值

c# - 将万无一失的 RequiredIf 与枚举一起使用

c# - HtmlElement.Parent 返回错误的父级

c# - ASP Dropdown.FindByText 如果重复 ListItem.Text

C# 条件运算符 ? : has problems with nullable int

c# - 内容传输现在不可用,Sony A6000

c# - HORN 的实际应用是什么?