Zavaros hivatkozások tárgyak

szavazat
1

Én nagyon zavaros objektumkapcsolatok! Van két osztály személy és címe. Íme a részletek:

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

A AddAddress módszer a Person osztály hozzáadja a címet a címek gyűjtése és meghatározza a személy az Address objektum. Most, a kód azt tegye a következőket:

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

            person.Addresses[0].Person = null; 

Gondolok, hogy be kell állítania a fő célja, hogy null óta címek [0] .Person mutat az eredeti személy objektumot. De ez nem a beállítás, hogy null. Mi történik itt?

A kérdést 26/08/2009 23:25
a forrás felhasználó
Más nyelveken...                            


4 válasz

szavazat
8

Mi történik itt?

Egyszerű Magyarázat:

A változó, ebben az esetben a „személy”, tartja egy referenceaz objektumot. A motorháztető alatt, ez csak egy szám. Amikor megadja azt null, mit csinálsz éppen megállás, hogy a változó mutatva az objektumot. A tárgy maga is fennáll.

- Edit

A lehetőség, hogy megértsék, hogyan működik az, hogy szó szerint közel áll a számítógép, és pont azt. Ön most egy változó, és a számítógép egy objektum. Most megáll mutatva a számítógép (tedd le a karját). Most már olyan változót, amely hozzá van rendelve null. A számítógép még mindig létezik, semmi sem változott róla, az egyetlen különbség az, hogy most már többé nem pont azt.

Válaszolt 26/08/2009 23:28
a forrás felhasználó

szavazat
0

A Address.Person érték kifejezetten beállítva a kódban, amikor telefonál AddAddress

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

No, ha a kódban lehet eltávolítani a referencia, ha eltávolítja az értéket a listából. Sőt, ha kellett hívni Person.Addresses.Count, akkor azt látjuk, hogy azt hiszi, több címek benne, mint amennyi valójában van (mert az értéket null hívása helyett Person.Addresses.Remove (0);

Válaszolt 26/08/2009 23:34
a forrás felhasználó

szavazat
0

Address.Person csak egy utalás, hogy egy személy. Beállítás, hogy null megsemmisíti a referencia a Cím osztály, de a személy továbbra is létezik. A var hoz létre (fő) is csak a referencia, így nem nullázódás ki az a személy, változó. Abban a pillanatban, te null ki az a személy, referencia (fő = null;), az a személy kap szemetet gyűjtött.

Válaszolt 26/08/2009 23:32
a forrás felhasználó

szavazat
0

Address.Persontárolja hivatkozás egy tárgy. Ha kér Address.Person , akkor kövesse a referencia pálya vissza az eredeti objektumot. Ha beállított Address.Person , akkor cseréli fel egy új referencia. Ebben az esetben, akkor a beállítás, hogy semmit, vagy egy üres hivatkozás.

Válaszolt 26/08/2009 23:28
a forrás felhasználó

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more