Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何避免GUI控件和域对象之间的并行继承层次结构_C#_User Interface_Inheritance_Mvp - Fatal编程技术网

C# 如何避免GUI控件和域对象之间的并行继承层次结构

C# 如何避免GUI控件和域对象之间的并行继承层次结构,c#,user-interface,inheritance,mvp,C#,User Interface,Inheritance,Mvp,我正在用C#开发一个Windows窗体应用程序。我使用的是MVP设计模式。在GUI中,用户可以操作打印机对象,并且需要有向用户表示打印机对象的自定义控件 有一个表示打印机的类层次结构。在底层有一个抽象的打印机类。然后是一个抽象的InkJetPrinter类和一个抽象的LaserPrinter类,每个类都继承自Printer。具体类表示不同品牌和型号的打印机,并从InkJetPrinter或LaserPrinter继承 GUI中表示打印机的每个UserControl类都需要具有特定于打印机类型的特

我正在用C#开发一个Windows窗体应用程序。我使用的是MVP设计模式。在GUI中,用户可以操作打印机对象,并且需要有向用户表示打印机对象的自定义控件

有一个表示打印机的类层次结构。在底层有一个抽象的打印机类。然后是一个抽象的InkJetPrinter类和一个抽象的LaserPrinter类,每个类都继承自Printer。具体类表示不同品牌和型号的打印机,并从InkJetPrinter或LaserPrinter继承

GUI中表示打印机的每个UserControl类都需要具有特定于打印机类型的特性和功能。例如,喷墨打印机可能有一个显示墨水量的显示器,某种型号的激光打印机可能有特殊功能,可以通过控件上的附加按钮访问,等等


我看不到比将UserControl类的继承层次结构与Printer类的继承层次结构并行更好的处理方法。有更好的方法吗?

在这种设计中,您可能需要LaserPrinterControl和InkJetInterControl,但它们不需要从PrinterControl派生出来。例如,您可以同时为两者提供一个“PrinterControl”子控件


缺点是多了一点粘合代码,但优点是您可以完全控制PrinterControl的行为

我不认为这是一个经典的并行继承层次结构?如果是的话,那么我认为需要编写一个GUI控制类,以使非GUI打印机类能够充分发挥功能。事实并非如此,因为可以只使用打印机类而不使用附带的UserControl类来编写功能齐全的非GUI应用程序

谢谢。这就是我最终可能真的这么做的原因。