2010-10-17 10 views
5

Supongamos que tengo un modelo de vista TabViewModel que amplía ObservableObject la clase para ViewModels en MVVM Foundation Framework. Luego también tengo un EditorTabViewModel que se extiende a TabViewModel, ahora necesito extender DependencyObject para implementar DependencyProperties. No puedo extender más de 1 clase. ¿Cómo podría implementar esto? Podría tener una clase "intermedia" como ...C#: Extendiendo desde más de 1 clase

TabViewModel : ObservableObject 

EditorTabViewModel : TabViewModel 

DependentEditorTabViewModel : DependencyObject 

pero eso es 1 clase extra innecesaria. ¿Alguna mejor manera de hacer esto?

ACTUALIZACIÓN

Operaciones en realidad no puedo hacer lo anterior. DependentEditorTabViewModel aún necesita extender EditorTabViewModel ... aparte de DependencyObject

Respuesta

1

No es una clase extra si está logrando lo que necesita. Aquí se explica cómo lo haría:

DependentEditorTabViewModel : DependencyObject 

TabViewModel : DependentEditorTabViewModel 
+0

Creo que cometí un error similar ... aparte de 'DependencyObject', aún necesito extender' ObservableObject'. En otras palabras, necesito que la clase resultante extienda principalmente 'DependencyObject',' ObservableObject'. –

+0

Ok. Desafortunadamente, C# no admite herencia múltiple. Mire en la implementación de una interfaz en su lugar. –

2

C# no es compatible con Multiple Inheritance. Su mejor opción es usar interfaces, en lugar de clases para padres.

Incluso si no tiene la opción de usar interfaces (tal vez no tiene acceso al código), generalmente es mejor para prefer composition over inheritance. ¿Realmente necesita heredar ambas clases, o puede componer con ellas en su lugar?

+0

En mi escenario anterior, ¿cómo podría implementar la composición sobre la herencia? Leí acerca de eso b4 pero en este caso, tal vez mi mente no está funcionando bien :) –

+0

@jiewmeng: Me temo que no sé nada sobre el MVVM Foundation Framework, así que no puedo ayudar con los detalles. Lo siento. –

Cuestiones relacionadas