0

私は基本クラス(PrintProviderBase)を持っています。いくつかの状態 ( PrinterUnavailableNoPaper、 ...) を保持します。

次に、このクラスから継承します: ColorPrintProvider, BlackAndWhitePrintProvider...

基本クラスに次のようなプロパティがあると仮定しました。

private PrintStateEnum State { get; set; }

次に、各子クラス (異なる印刷プロバイダー) には独自の状態があります (静的なものはありません)。共通の機能と状態を にカプセル化できるように、各子クラスにのコピーを用意するつもりでしたが、クラスの 1 つのインスタンスがbaseそれらの間で共有されているようです。base classbase class

現在、印刷プロバイダーがNoPaper状態になると、他のプロバイダーは不適切な状態のために印刷を停止します。この動作を変更するにはどうすればよいですか?

4

2 に答える 2

2

ColorPrintProvider と BlackAndWhitePrintProvider の各インスタンスには、State 値の独自の (そして別個の) インスタンスがありますが、公開または保護しない限り (またはそれを公開する他のプロパティやメソッドを提供しない限り)、それらのいずれもアクセスできません。一般に、値が静的である場合、値はインスタンス間でのみ共有されます。

于 2011-01-22T04:05:22.667 に答える
1

投稿したコードでは、 State は PrintProviderBase に対してプライベートであり、 ColorPrintProvider などの派生型には表示されません。

State をパブリック プロパティにし、継承ではなく合成を使用します。ColorPrintProvider、BlackAndWhitePrintProvider などで、PrintProvider (PrintProviderBase から名前を変更) のメンバーを保持します。

サンプルコード:

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...
     }
}
于 2011-01-22T04:15:02.547 に答える