0

我有一个基类(PrintProviderBase)。它拥有一些状态(PrinterUnavailable, NoPaper, ...)。

然后我从这个类继承: ColorPrintProvider, BlackAndWhitePrintProvider...

我假设如果基类具有这样的属性:

private PrintStateEnum State { get; set; }

然后每个子类(不同的打印提供者)都有自己的状态(尽管没有什么是静态的)。似乎base该类的一个实例在它们之间共享,而我的意思是在每个子类中都有一个副本,base class以便可以将通用功能和状态封装到base class.

现在,如果打印提供商进入NoPaper状态,其他提供商会由于状态不正确而停止打印。我怎样才能改变这种行为?

4

2 回答 2

2

ColorPrintProvider 和 BlackAndWhitePrintProvider 的每个实例都有自己的(和不同的)State 值实例,尽管除非您将其设为公共或受保护(或提供其他公开它的属性或方法),否则它们都无法访问它。通常,如果该值是静态的,则该值只会在实例之间共享。

于 2011-01-22T04:05:22.667 回答
1

在您发布的代码中,State 对 PrintProviderBase 是私有的,并且不会对派生类型(如 ColorPrintProvider 等)可见。

将 State 设为公共属性并使用 Composition 而不是继承。在 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 回答