Rozejrzałem się po kilku, aby znaleźć rozwiązanie tego problemu. Znalazłem kilka sposobów na rozwiązanie tego problemu, ale szczerze mówiąc, nie zdawałem sobie sprawy z tego, który ze sposobów byłby uważany za "właściwy" sposób C# lub OOP rozwiązania. Moim celem jest nie tylko rozwiązanie problemów, ale także opracowanie dobrego zestawu standardów kodowych i jestem pewien, że istnieje standardowy sposób rozwiązania tego problemu.C# Obiekty różnych klas w jednej liście
Załóżmy, że mam 2 rodzaje drukarek do drukarek z ich odpowiednimi klasami i sposobami komunikowania się: PrinterType1, PrinterType2.
Chciałbym również móc później dodać inny typ, jeśli jest to konieczne. Jeden krok w abstrakcji mają wiele wspólnego. Powinno być możliwe wysłanie ciągu znaków do każdego z nich jako przykładu. Oba mają zmienne wspólne i zmienne unikalne dla każdej klasy. (Jeden na przykład komunikuje się przez port COM i ma taki obiekt, podczas gdy drugi komunikuje się przez TCP i ma taki obiekt).
Chciałbym jednak po prostu zaimplementować listę wszystkich tych drukarek i móc przeglądać listę oraz wykonywać czynności jako "Wyślij (wiadomość tekstową)" we wszystkich drukarkach niezależnie od ich typu. Chciałbym również uzyskać dostęp do zmiennych takich jak "PrinterList [0] .Name", które są takie same dla obu obiektów, jednak chciałbym również w niektórych miejscach, aby uzyskać dostęp do danych, które są specyficzne dla samego obiektu (na przykład w oknie ustawień aplikacja, dla której ustawiono nazwę portu COM dla jednego obiektu i numer IP/port dla innego obiektu).
Więc, krótko mówiąc coś podobnego:
wspólne:
- Nazwa
- send()
specyficzne dla PrinterType1:
- Port
Specific do PrinterType2:
- IP
i pragnę, na przykład, nie Send() na wszystkich obiektach, niezależnie od rodzaju i liczby obiektów obecnych.
Czytałem o polimorfizm, generics, interfejsy i takie, ale chciałbym wiedzieć, jak to, w moich oczach podstawowe, problem zazwyczaj będzie rozpatrywane w C# (i/lub OOP w ogóle).
Właściwie to próbowałem zrobić klasę podstawową, ale nie wydawało mi się to właściwe. Na przykład nie używam funkcji "string Send (string Message)" w samej klasie bazowej. Więc dlaczego miałbym zdefiniować taki, który musi zostać nadpisany w klasach pochodnych, kiedy nigdy nie używałbym tej funkcji w klasie bazowej w ogóle?
Jestem naprawdę wdzięczny za wszelkie odpowiedzi. Ludzie tutaj wydają się bardzo kompetentni i to miejsce wcześniej dostarczyło mi wielu rozwiązań. Teraz mam wreszcie konto, na które trzeba odpowiedzieć i zagłosować.
EDIT:
Aby dodatkowo wyjaśnić, chciałbym również, aby móc uzyskać dostęp do obiektów rzeczywistych printertype. Na przykład zmienna Port w PrinterType1, która jest obiektem SerialPort. Chciałbym uzyskać do niego dostęp, takich jak: PrinterList[0].Port.Open()
i mieć dostęp do pełnego zakresu funkcjonalności pod nią portu. Jednocześnie chciałbym wywołać funkcje rodzajowe, które działają w ten sam sposób dla różnych obiektów (ale z różnymi implementacjami):
foreach (printer in Printers)
printer.Send(message)
Proponuję, w zależności od tego, które rozwiązanie będzie używane w tym konkretnym przypadku, wybierasz dobrą książkę o podstawach OOP. Dobra książka również dostarczy przykłady i na pewno zobaczysz KIEDY i JAK używać każdej funkcji języka, którą wybierzesz. –
+1. Chcąc opracować dobry zestaw standardów kodowych. –