2010-01-27 3 views
1

Dans Silverlight/C#, je classe principale, ce qui crée une instance de l'enfant, l'enfant _child = new enfant (...)Appel de la méthode de la classe des enfants

Maintenant, en classe enfant je dois appeler une méthode de la classe principale. Quel devrait être le meilleur moyen de le faire? Événements?

Répondre

4

La réponse dépend de ce que la sémantique de l'appel sont; votre exemple est vague et n'a pas de sémantique évidente à partir de laquelle il est impossible de donner une bonne réponse.

Le principal fournit-il un service à l'enfant? Par exemple, est l'appel que l'enfant veut faire sur Main quelque chose comme "obtenir moi la liste des utilisateurs qui sont autorisés à faire bla", ou "ajouter tous les comptes débiteurs pour Novembre"?

Ou est principal réagissant à un événement assocaited avec enfant? Par exemple, peut-être que Child est un bouton et Main est un formulaire, et Main souhaite réagir lorsque le bouton est cliqué.

Dans le premier cas, Main doit fournir un objet - peut-être lui-même - à Child qui implémente le service souhaité. L'objet peut être principal lui-même, ou un délégué à une méthode, ou une interface, mais c'est quelque chose que Child peut invoquer lorsque le service est nécessaire.

Dans ce dernier cas, Main devrait écouter l'événement déclenché par Child.

Ce qui est correct dépend de ce qui signifie des objets; Pouvez-vous décrire le sens plus clairement?

+0

Main est la MainPage, un contrôle utilisateur. L'enfant est une classe qui représente un objet dans la scène. Je veux appeler une méthode de Main à partir de child, qui modifie certains paramètres MainPage. L'appel dépend de l'interaction de l'utilisateur – jose

3

L'événement est le modèle approprié. Voir this answer sur les raisons conceptuelles entourant le flux d'informations dans une hiérarchie objet/classe.

composants plus profonds simplement « libération » leurs informations - généralement via un événement - et il « flotte » la chaîne sans invoquer directement

7

solution Simplest sera de fournir une référence à Main à une instance de Child classe:

public class Child 
{ 
    private Main main; 

    public Child(Main main) 
    { 
     this.main = main; 

     main.Bar(); 
    } 
} 

public class Main 
{ 
    public void Foo() 
    { 
     Child c = new Child(this); 
    } 

    public void Bar() 
    { 
    } 
} 

Cela peut être encore améliorée par abstraire de Main classe derrière une interface IMain afin de minimiser le couplage.

Mais la meilleure solution sera d'utiliser l'événement bouillonnant

Questions connexes