我已經查找了一些現在找到解決此問題的方法。我發現了幾種可以解決這個問題的方法,但說實話,我沒有意識到哪種方式可以被視爲「正確」的C#或OOP解決方式。我的目標不僅是要解決問題,而且要制定一套完善的代碼標準,並且我相當肯定有一個標準的方法可以解決這個問題。C#在一個列表中的不同類對象
比方說,我有兩種類型的打印機硬件及其各自的類和通信方式:PrinterType1,PrinterType2。
我還希望能夠稍後添加其他類型,如果需要的話。這些抽象概念有一個共同之處。作爲例子,應該可以向它們中的每一個發送一個字符串。它們都有共同的變量和每個類別獨有的變量。 (其中一個例如通過COM端口進行通信並且具有這樣的對象,而另一個通過TCP進行通信並且具有這樣的對象)。
但是,我想只是實現所有這些打印機的列表,並且能夠通過列表並執行所有打印機上的「發送(字符串消息)」,而不管類型如何。我還想訪問兩個對象相同的變量,例如「PrinterList [0] .Name」,但是我也會在某些地方訪問特定於對象本身的數據(例如,在設置窗口中COM端口名稱爲一個對象設置的應用程序以及另一個對象的IP /端口號)。
因此,簡而言之是這樣的:
共同點:
- 名稱
- 發送()
具體到PrinterType1:
- 端口
具體到PrinterType2:
- IP
而且我希望,例如,不要發送()上的所有對象,無論類型和現在的對象的數量。我已經閱讀了關於多態性,泛型,接口等的內容,但是我想知道在我眼中基本的這個問題通常會在C#(和/或一般的OOP)中處理。
我實際上已經嘗試做一個基類,但它對我來說並不完全正確。例如,我沒有在基類中使用「string Send(string Message)」函數。那麼爲什麼我會定義一個需要在派生類中重寫的地方,當我永遠不會在基類中使用函數時呢?
我非常感謝任何答案。這裏的人們看起來非常有知識,而且這個地方早就爲我提供了很多解決方案。現在我終於有一個帳戶來回答和投票了。
編輯:
額外解釋,我也想能夠訪問實際printertype的對象。例如PrinterType1中的Port變量,它是一個SerialPort對象。我想訪問它,如: PrinterList[0].Port.Open()
並有權訪問底層端口的全部功能。同時,我想調用相同的方式工作,針對不同的對象(但具有不同的實現)的通用功能:
foreach (printer in Printers)
printer.Send(message)
我建議,無論您選擇哪種解決方案,您都會選擇一本關於面向對象基礎知識的好書。一本好書也將提供示例,我相信您會看到WHEN和HOW如何使用您將選擇的各種語言功能。 –
+1。希望開發一套好的代碼標準。 –