Confus sur les références dans les objets

voix
1

Je suis vraiment confus au sujet des relations d'objet! J'ai deux classes Personne et adresse. Voici les détails:

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

La méthode AddAddress dans la classe de personne ajoute l'adresse à la collecte des adresses et définit également la personne pour l'objet d'adresses. Maintenant, dans le code, je fais ce qui suit:

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

            person.Addresses[0].Person = null; 

Je pense qu'il devrait définir l'objet personne à null depuis des adresses [0] .Person pointe vers l'objet personne d'origine. Mais il ne lui la valeur NULL. Qu'est-ce qui se passe ici?

Créé 26/08/2009 à 23:25
source utilisateur
Dans d'autres langues...                            


4 réponses

voix
8

Qu'est-ce qui se passe ici?

Simple Explication:

Une variable, dans ce cas , « Personne », est titulaire d' un referenceà l'objet. Sous le capot, c'est juste un nombre. Lorsque vous attribuez à null, ce que vous faites est tout simplement arrêter ce pointage variable à l'objet. L'objet lui - même existe encore.

-- Modifier

Une façon de comprendre comment cela fonctionne, est de se tenir littéralement près de votre ordinateur, et le point à elle. Vous êtes maintenant une variable, et votre ordinateur est un objet. Maintenant , arrêtez de pointage à l'ordinateur (mettez votre bras vers le bas). Maintenant , vous êtes une variable qui a été attribuée null. L'ordinateur existe encore, rien n'a changé à ce sujet, la seule différence est que vous maintenant sans plus point il.

Créé 26/08/2009 à 23:28
source utilisateur

voix
0

La valeur Address.Person est explicitement défini dans votre code lorsque vous appelez AddAddress

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

Nulle part dans votre code ne vous supprimez la référence lorsque vous supprimez la valeur de la liste. En fait, si vous deviez appeler Person.Addresses.Count, vous verriez qu'il pense qu'il ya plus d'adresses dans ce que il y a (parce que vous définissez la valeur null au lieu d'appeler Person.Addresses.Remove (0 en fait);

Créé 26/08/2009 à 23:34
source utilisateur

voix
0

Address.Person est juste une référence à une personne. Cette valeur sera invalidera la référence dans la classe d'adresses, mais la personne existera toujours. Le var vous créez (personne) est juste une référence, si vous n'êtes pas Nulling la variable personne. Le moment où vous faites null la référence personne (personne = null;), la personne se ramasse-miettes.

Créé 26/08/2009 à 23:32
source utilisateur

voix
0

Address.Personstocke une référence à un objet. Lorsque vous demandez Address.Person , il suivra le chemin de référence à l'objet d' origine. Lorsque vous définissez Address.Person , vous remplacez la référence avec une nouvelle référence. Dans ce cas, vous définissez à rien, ou une référence vide.

Créé 26/08/2009 à 23:28
source utilisateur

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