2008-12-16 7 views
5

Hier j'ai pensé que ce serait bien d'implémenter mon propre Trigger dans une application WPF. J'ai créé une classe MyTrigger qui a hérité de TriggerBase. TriggerBase est une classe abstraite publique. Donc, l'héritage n'est pas un problème. Mais les constructeurs à l'intérieur de cette classe sont marqués internes. Le compilateur renvoie une erreur car le constructeur n'est pas valide. Pourquoi quelqu'un crée-t-il une classe publique mais marque les constructeurs comme internes?constructeur interne

Répondre

9

Si vous voulez que la classe soit visible, mais permettez seulement qu'elle soit sous-classée dans votre propre assemblage. Les sous-classes peuvent avoir elles-mêmes des membres du public - ou peuvent être consultées avec une usine.

Je ne peux pas dire si c'est une bonne décision de conception pour TriggerBase dans WPF, mais c'est au moins raisonnable dans certaines situations.

5

Une raison que je pourrais penser est que la création réelle de nouvelles instances serait traitée par une autre classe publique dans le même assemblage. Cela forcerait que vous créez l'instance à travers cette autre classe - éventuellement une sorte d'implémentation de modèle d'usine.

2

Il est public car il est utilisé comme classe de base pour les déclencheurs fournis avec WPF (Trigger, MultiTrigger, EventTrigger, DataTrigger, etc.). Ce n'était pas public alors vous ne seriez pas capable de marquer ces classes comme publiques.

Les constructeurs sont internes car ils ne vous permettent pas de l'utiliser vous-même. Je suppose que vous êtes supposé dériver de l'une des classes mentionnées ci-dessus.