【发布时间】:2012-12-03 16:15:47
【问题描述】:
我现在已经四处寻找解决这个问题的方法。我找到了几种可以解决它的方法,但老实说,我没有意识到哪些方法会被认为是“正确的”C# 或 OOP 解决方法。我的目标不仅是解决问题,而且是制定一套好的代码标准,我相当确定有一个标准的方法来处理这个问题。
假设我有 2 种类型的打印机硬件,它们各自的类和通信方式:PrinterType1、PrinterType2。
如果需要,我还希望以后能够添加另一种类型。抽象的一步,它们有很多共同点。作为示例,应该可以向它们中的每一个发送一个字符串。它们都有共同的变量和每个类独有的变量。 (例如,一个通过 COM 端口通信并具有这样的对象,而另一个通过 TCP 通信并具有这样的对象)。
然而,我只想实现所有这些打印机的列表,并且能够通过列表并在所有打印机上执行“发送(字符串消息)”,无论类型如何。我还想访问两个对象都相同的变量,例如“PrinterList[0].Name”,但是我也想在某些地方访问特定于对象本身的数据(例如在为一个对象设置 COM 端口名称而为另一个对象设置 IP/端口号的应用程序。
所以,简而言之:
共同点:
- 姓名
- 发送()
特定于 PrinterType1:
- 端口
特定于 PrinterType2:
- IP
例如,我希望对所有对象执行 Send(),而不管对象的类型和存在的对象数量。
我已经阅读了多态性、泛型、接口等方面的内容,但我想知道在我看来基本的问题通常如何在 C#(和/或一般的 OOP)中处理。
我确实尝试过创建一个基类,但对我来说似乎不太合适。例如,我在基类本身中没有使用“字符串发送(字符串消息)”函数。那么,当我一开始就永远不会使用基类中的函数时,为什么还要在派生类中定义一个需要重写的函数呢?
我真的很感谢任何答案。这里的人似乎知识渊博,这个地方早些时候为我提供了许多解决方案。现在我终于有了一个可以回答和投票的帐户。
编辑:
另外解释一下,我还希望能够访问实际打印机类型的对象。例如 PrinterType1 中的 Port 变量,它是一个 SerialPort 对象。我想像这样访问它:
PrinterList[0].Port.Open()
并可以访问底层端口的全部功能。同时,我想调用对不同对象以相同方式工作的通用函数(但具有不同的实现):
foreach (printer in Printers)
printer.Send(message)
【问题讨论】:
-
我建议,无论您将针对这种特定情况使用哪种解决方案,您都应该选择一本关于 OOP 基础知识的好书。一本好书也会提供示例,我相信您会看到何时以及如何使用您选择的语言的每个功能。
-
+1。因为想要开发一套好的代码标准。
标签: c# list generics interface polymorphism