Question

J'ai une classe de base (PrintProviderBase). Il détient certains États (PrinterUnavailable, NoPaper, ...).

Alors je hérite de cette classe: ColorPrintProvider, BlackAndWhitePrintProvider ...

Je suppose que si on la classe de base possède une propriété comme ceci:

private PrintStateEnum State { get; set; }

Ensuite, chaque classe enfant (différents fournisseurs d'impression) ont son propre état de (si rien est statique). Il semble une instance de la classe base est partagée entre eux alors que je voulais dire d'avoir une copie du base class dans chaque classe enfant si les fonctionnalités communes et de l'Etat peuvent être encapsulent en base class.

Maintenant, si un fournisseur d'impression passe à l'état de NoPaper, d'autres les arrêter l'impression en raison de l'état incorrect. Comment puis-je modifier ce comportement?

Était-ce utile?

La solution

Dans le code affiché, l'État est un organisme privé à PrintProviderBase et ne serait pas visible pour les types dérivés comme ColorPrintProvider et ainsi de suite.

Faire état d'une propriété publique et l'utilisation Composition non héritage. Gardez un membre de PrintProvider (changer le nom de PrintProviderBase) dans ColorPrintProvider, BlackAndWhitePrintProvider et ainsi de suite.

Exemple de code:

public class PrinterState
{
     public Boolean IsPaperTrayEmpty { get; set; }
     public Int32 CartridgeLevel { get; set; }
}

public class ColorPrintProvider
{
     public PrinterState CurrentState { get; private set; }

     private void UpdateCurrentState()
     {
         // update the current state
         // based on / after some events like RequestForPrint, PrintCompleted...
     }
}

Autres conseils

Chaque instance de ColorPrintProvider et BlackAndWhitePrintProvider auront leur propre (et distincte) instance de la valeur de l'Etat, bien qu'aucun d'entre eux sera en mesure d'y accéder à moins que vous le rendre public ou protégé (ou fournir d'autres propriétés ou méthodes qui l'exposeraient ). En général, la valeur ne serait partagée entre les instances si elle était statique.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top