2010-10-17 5 views
5

Supposons que j'ai un ViewModel TabViewModel qui étend ObservableObject la classe pour ViewModels dans MVVM Foundation Framework. Ensuite, j'ai aussi un EditorTabViewModel qui s'étend TabViewModel, Maintenant, je dois étendre DependencyObject pour implémenter DependencyProperties. Je ne peux pas prolonger plus d'une classe. Comment pourrais-je l'implémenter? Je pourrais avoir une classe "intermédiaire" comme ...C#: Extension de plus de 1 classe

TabViewModel : ObservableObject 

EditorTabViewModel : TabViewModel 

DependentEditorTabViewModel : DependencyObject 

mais c'est 1 classe supplémentaire inutile. Une meilleure façon de le faire?

MISE À JOUR

Ops en fait je ne peux pas faire ce qui précède. DependentEditorTabViewModel encore besoin d'étendre EditorTabViewModel ... en dehors de DependencyObject

Répondre

1

Ce n'est pas une classe supplémentaire si vous accomplissez ce dont vous avez besoin. Voici comment procéder:

DependentEditorTabViewModel : DependencyObject 

TabViewModel : DependentEditorTabViewModel 
+0

Je pense que j'ai fait une erreur similaire ... en dehors de 'DependencyObject', j'ai encore besoin d'étendre' ObservableObject'. En d'autres termes, j'ai besoin de la classe résultante pour étendre principalement 'DependencyObject',' ObservableObject'. –

+0

Ok. Malheureusement, C# ne supporte pas l'héritage multiple. Regardez dans l'implémentation d'une interface à la place. –

2

C# ne prend pas en charge Multiple Inheritance. Votre meilleur pari est d'utiliser des interfaces, plutôt que des classes parentes.

Même si vous n'avez pas la possibilité d'utiliser des interfaces (vous n'avez peut-être pas accès au code), il est généralement préférable de prefer composition over inheritance. Avez-vous vraiment besoin de hériter ces deux classes, ou pouvez-vous composer avec eux à la place?

+0

Dans mon scénario ci-dessus, comment pourrais-je implémenter la composition sur l'héritage? J'ai lu à propos de ce b4 mais dans ce cas, peut-être que mon esprit ne fonctionne pas bien :) –

+0

@jiewmeng: Je crains de ne rien savoir de la MVVM Foundation Framework, donc je ne peux pas vous aider avec les détails. Pardon. –