2012-03-03 3 views
1

J'ai demandé un Question semblable avant mais cette fois c'est un peu prolongé. Ce que j'avais déjà demandé était de surcharger SomeProperty dans la classe dérivée pour laquelle la réponse utilisait l'opérateur 'new'.Substituer la propriété dans la classe dérivée

Mais maintenant, je suis à nouveau dans le même scénario mais,

cette fois, je dois exécuter un comportement par défaut dans la classe de base tout en fixant la SomeProperty dans la classe dérivée.

je dois forcer l'utilisateur qui dérivez de ma classe de base pour exécuter un ensemble de code dans la classe de base tout en fixant la SomeProperty dans la classe dérivée. J'ai déjà essayé avec le modèle de modèle mais j'ai besoin de lier cela à un contrôle personnalisé dans ma bibliothèque de contrôle de Windows Phone. Donc, ma classe de base ne peut pas être une classe abstract. Je ne peux donc pas spécifier une fonctionnalité commune dans la classe de base et m'assurer que la fonctionnalité est appliquée pendant que la variable est définie dans la classe dérivée.

Existe-t-il un autre moyen que je pourrais appliquer ce code (ou sorte de règle) s'exécute dans la classe de base tout en définissant la propriété dans la classe dérivée?

Modifier: Je dois également mentionner que la personne qui dérive de la classe de base ne devrait pas appeler le comportement spécifique dans la classe de base. J'ai besoin de forcer l'invocation.

+---------------+ 
    | UIElement  | 
    |---------------|       +----------------------+ 
    | ...   |       | My Windows Application 
    | SomePropert{} |       |----------------------| 
    | //Force to |<---+      |+--------------------+| 
    | //to xcute this code      ||MyUserControl  || 
    +---------------+ |      ||--------------------|| 
     +--------------+-----+     ||     || 
     |FrameWorkElement |     |+--------------------+| 
     |--------------------|     |//Want to use   | 
     | ...    |<-+    |// SomeProperty;  | 
     +--------------------+ |    |      | 
        +-----------+-+   |      | 
        |Control  |   |      | 
        |-------------|   +----------------------+ 
        | ...  |<---+ 
        +-------------+ | 
          +-----------+---+ 
          | UserControl | 
          |---------------|<---+ 
          | ...   | | 
          +---------------+ | 
             +----------+-------+ 
             | MyUserControl | 
             |------------------| 
             | SomeProperty{} | 
             | //Want to override 
             | //Setting this here| 
             |//should make sure| 
             |//base class code | 
             |//gets executed | 
             +------------------+ 
+0

Vous pouvez utiliser 'new' sur une méthode identique à celle d'une propriété. Vous pouvez également utiliser un peu de réflexion pour atteindre l'intérieur de la classe de base et piquer les membres. Utiliser la réflexion et la mise en cache des délégués serait ma recommandation. – IAbstract

Répondre

1

Si je comprends bien votre question, vous pouvez utiliser le mot-clé base pour faire en sorte que la méthode originale est exécutée aussi bien. Par exemple,

public new void Method() 
{ 
    DoMyCustomStuff(); 
    base.Method(); 
} 
+0

Cette jives avec http://msdn.microsoft.com/en-us/library/ms228387(v=vs.90).aspx. – mozillanerd

+0

En fait, je ne peux pas attendre que l'utilisateur dérive de la classe de base pour l'appeler explicitement. J'ai besoin de l'appeler implicitement (force), le comportement dans la classe de base. – Ajai

Questions connexes