2009-04-12 8 views
0

J'ai un objet qui crée dynamiquement un certain nombre d'objets enfants. Ces objets enfants sont dérivés de UserControl. Quelle est la meilleure méthode pour transmettre des informations pour transmettre des informations au parent? Dans le passé, j'ai utilisé l'événement délégué, mais récemment, j'ai simplement utilisé une référence au parent dans le constructeur des objets enfants.Quelle est la meilleure méthode pour transmettre des informations d'un enfant à un objet parent dans C#

J'ai des réserves au couplage serré car je crains que l'objet enfant puisse être ligoté si le parent ne parvient pas à exécuter la méthode référencée en temps opportun.

Je ne voulais pas commencer une nouvelle question alors je vais demander ici.

Si des événements ont été câblés pour les objets créés dynamiquement et que l'objet est mis au rebut ultérieurement, devrais-je supprimer l'événement avant de mettre l'événement au rebut? Et ... si je garde mes objets créés dynamiquement dans un tableau ou une table de hachage, le simple fait de supprimer cet élément de liste élimine l'élément de la mémoire.

Répondre

6

Cela dépend de la situation. Les événements sont appropriés si un objet veut en observer un autre et réagir à des changements particuliers. Il suffit de garder une référence au parent dans d'autres situations. Si vous voulez des conseils pour un cas très spécifique, veuillez donner des détails sur ce cas.

2

Dépend de votre attitude envers le couplage serré et de la situation exacte dans la main. Personnellement, je pense que l'approche délégué/événement est beaucoup plus propre.

Passer une référence implique que l'enfant a besoin de comprendre le type de l'objet parent? OK, vous pourriez probablement utiliser une classe de base ou une interface, mais c'est toujours nécessaire. L'avantage du modèle délégué/événement est que l'objet enfant peut simplement publier des événements et que celui qui est enregistré recevra les événements. Modèle d'observateur classique.

0

bien, je pense que Jon a suggéré que les événements sont les meilleurs pour observer les changements dans d'autres contrôles, c'est le meilleur. vous pouvez également créer des propriétés dans le contrôle utilisateur principal puis Get, le définir à partir des contrôles enfants, je le fais tout le temps.

espérons que cela aide.

0

Si vous vous souciez du couplage étroit, envisagez d'utiliser une interface avec l'objet parent, qui expose uniquement les méthodes nécessaires pour transmettre vos données.

Afin d'empêcher le verrouillage des contrôles enfants (respectivement le thread UI), vous pouvez utiliser un BackgroundWorker pour effectuer le travail dans un thread séparé.

Questions connexes