私は今この問題を解決するために何かを見てきました。私はそれを解決することができるいくつかの方法を見つけましたが、正直言って、それを解決する "正しい" C#またはOOPの方法と考えられる方法はわかりませんでした。私の目標は、問題を解決するだけでなく、コード標準の優れたセットを開発することでもあり、この問題を処理する標準的な方法があると確信しています。C#1つのリスト内の異なるクラスオブジェクト
私はそれぞれのクラスと通信方法で2種類のプリンタハードウェア、PrinterType1、PrinterType2を持っています。
また、必要に応じて後で別のタイプを追加することもできます。抽象化のステップアップは共通点が多い。例としてそれぞれの文字列に文字列を送ることが可能でなければなりません。彼らはどちらも共通の変数と各クラスに固有の変数を持っています。 (たとえば、COMポート経由で通信し、そのようなオブジェクトを持ち、もう一方はTCP経由で通信し、そのようなオブジェクトを持っています)。
しかし、私はこれらすべてのプリンタのリストを実装し、タイプに関係なく、リストを通過してすべてのプリンタで「送信(文字列メッセージ)」として実行することができます。私は両方のオブジェクトで同じ "PrinterList [0] .Name"のような変数にアクセスしたいと思いますが、私はまた、オブジェクト自体に固有のデータにアクセスするような場所もあります(たとえば、 1つのオブジェクトにCOMポート名が設定され、別のオブジェクトにIP /ポート番号が設定されているアプリケーション)。一般的には
:
- 名前
- センド()PrinterType1に固有
:短い何かのようでそう
、
- ポート PrinterType2に固有
:
- IP
そして、私は、例えば、種類及び存在するオブジェクトの数に関係なく、すべてのオブジェクトに()を送信しないことを望みます。
多型性、ジェネリックス、インターフェイスなどについて私は読んだことがありますが、私の目では基本的にこの問題がC#(および/または一般的なOOP)でどう対処されるのかを知りたいと思います。
私は実際に基本クラスを作ろうとしましたが、それは私にはあまりにも似ていませんでした。例えば、私は基本クラス自体に "文字列送信(文字列メッセージ)"関数を使用していません。だから、なぜ私は最初の場所で基底クラスの関数を使用することはありません派生クラスでオーバーライドする必要がある定義するだろうか?
私は本当に答えに感謝しています。この周辺の人々は非常に精通しているように見え、この場所は以前より多くの解決策を私に提供してくれました。今私は最終的に答えて投票する口座を持っています。
EDIT:
は、さらに、説明するために、私はまた、実際のprintertypeのオブジェクトにアクセスできるようにしたいと思います。たとえば、SerialTypeオブジェクトであるPrinterType1のPort変数。私はそれにアクセスしたいと思います: PrinterList[0].Port.Open()
そして下位ポートの全機能にアクセスできます。私は別のオブジェクトの(しかし異なる実装と)同じように動作する汎用関数を呼び出すしたいと思います。同時に:
foreach (printer in Printers)
printer.Send(message)
私は、この特定のケースで使用するソリューションがあれば、OOPの基本についての良い本を選ぶことをお勧めします。良い本でも例が得られます。あなたが選ぶ言語の各機能を使用するには、WHENとHOWを参照してください。 –
+1。優れたコード標準を開発したい。 –