Je viens de me faire un problème et je me demande maintenant comment le résoudre. Pour commencer, j'utilise des composants tiers, y compris des contrôles de calendrier tels que le calendrier et la chronologie. Ils sont utilisés dans les classes de projets plus ou moins comme ça:VB.NET, modèles, réflexion, héritage, sentiment de dérive
Friend Class TimeBasedDataView
'some members
End Class
Friend Class ScheduleDataView
Inherits TimeBasedDataView
Public Schedule As Controls.Schedule.Schedule
'and others
End Class
Friend Class TimeLineDataView
Inherits TimeBasedDataView
Public TimeLine As Controls.TimeLine.TimeLine
'and others
End Class
(Hmm, coloration du code échoue, peu importe ...) Maintenant, pour permettre la gestion de l'aspect des données présentées il y a des mécanismes, y compris soi-disant gestionnaires de style. Beaucoup de code dans les répète, variant presque uniquement avec le contrôle qu'il maintient:
Friend Class TimeLineStyleManager
Private m_TimeLine As TimeLineDataView
Private Sub Whatever()
m_TimeLine.TimeLine.SomeProperty = SomeValue
End Sub
End Class
Friend Class ScheduleStyleManager
Private m_Schedule As ScheduleDataView
Private Sub Whatever()
m_Schedule.Schedule.SomeProperty = SomeValue
End Sub
End Class
Je me demandais si je pouvais créer une classe de base pour les gestionnaires, comme
Friend Class TimeBasedCtrlStyleManagerBase(Of T As TimeBasedDataView)
Private m_Control As T
'and others
End Class
qui unifierait ces deux, mais je me suis perdu quand il s'agissait de maintenir deux composants qui n'ont rien en commun (sauf les noms de leurs propriétés, etc.). Type de réflexion peut-être? Je vous serais reconnaissant pour tout conseil;)
Oui, je l'ai déjà compris (MustInherit et protégé). Mon problème est comment faire de la classe de base pour utiliser le contrôle interne approprié (m_Control.TimeLine ou m_Control.Schedule) ou, par exemple, enums à partir de l'espace de noms approprié dans certains cas (comme Controls.Schedule.TriState). – brovar
Je sais que cela semble désordonné, mais c'est tout le point pour moi, car un gestionnaire a, par exemple, boucle: "Pour chaque MyFormat As TimeLine.TimeLineFormatCondition [...]" et l'autre: "Pour chaque MyFormat comme calendrier .ScheduleFormatCondition [...] "avec certaines variables de ces types de planning/timeline à l'intérieur, mais le corps lui-même est identique. – brovar
@brovar - ce n'est pas si compliqué - tout ce qui est commun est dans la classe générique de base et tous les éléments spécifiques que vous mentionnez vont dans les classes de gestionnaire dérivées. C'est juste comment ça fonctionne. Si vous avez d'autres problèmes, postez peut-être une nouvelle question (avec un lien dans un commentaire ici) ou ajoutez plus de détails à cette question? – Enigmativity