2017-08-28 1 views
0

J'ai des problèmes pour afficher le titre de la question, mais je pense que cela résume le problème.C# Pouvez-vous enregistrer l'objet qui a appelé une méthode à un autre objet comme nœud de référence?

Ce que je veux faire est la suivante:

objet 1 a une méthode qui ajoute un sous-objet à un tableau; L'objet 2 est passé à travers le paramètre de la méthode; Ensuite, je souhaite que l'objet 2 assigne automatiquement l'objet 1 à son nœud de référence parent lors de son ajout.

Voici un exemple:

Room1 = new Area(10, 10, "Anthony's House"); 
    R1_LivingRoom = new SubArea(5, 5, "Living ROom"); 
    int[] loc = new int[2] {10,10 }; 
    Room1.setSubArea(loc, R1_LivingRoom); 
    R1_LivingRoom.Parent = Room1; 

Je voudrais une façon de garder la trace de la hiérarchie sans avoir besoin d'assigner moi-même comme dans cet exemple. Ce serait bien si:

Room1.setSubArea(loc, R1_LivingRoom); 

préformé automatiquement:

 R1_LivingRoom.Parent = Room1; 

On AJOUTÉE à CH1. Est-ce que je le fais le seul moyen possible? Pour l'assigner carrément ou passer le Room1 à travers un paramètre de sortes? Ou existe-t-il un moyen de le faire quand il est ajouté via setSubArea, il peut référencer l'objet appelant qui est Room1 et l'assigner automatiquement au parent?

Merci,

Répondre

2

Cela devrait fonctionner:

public class Room 
{ 
    public void setSubArea(int[] loc, SubArea room) 
    { 
     //some code 
     room.Parent = this; 
    } 
} 
+0

C'est ce que je l'ai fait au départ et ça ne fonctionne pas pour moi. Quand j'appelle la chambre.Parent, il ne le rend pas. Mais quand je l'assigne directement à l'extérieur, c'est le cas (room.Parent = Room1). Est-ce que "ceci" ne renvoie pas vraiment une référence à l'objet appelant? – user455046

+1

Cela doit fonctionner, peut-être vous disposez l'objet quelque part ou faire quelque chose d'autre, je ne peux pas dire quoi sans un aperçu de votre code. Essayez un cas de test très simple qui ne fait que cela et vous verrez que cela fonctionne. –

+1

Oui, ça a marché. Je faisais des vérifications de limites et j'ai oublié de le changer à l'intérieur des limites. Merci, j'ai besoin d'apprendre à revérifier plus. – user455046