Jestem programistą, który pracuje głównie z urządzeniami osadzonymi (zaprogramowanymi za pomocą C i złożenia). Moja znajomość C# i OOP jest bardzo ograniczona (chociaż w razie potrzeby mogę sobie z tym poradzić). Mam pięć urządzeń, które łączą się z komputerem przez USB. Komputer wykonuje pewne obliczenia i wysyła wynik do urządzenia. Te same obliczenia są wykonywane dla każdego urządzenia, ale obliczenia są wykonywane inaczej. Dla każdego urządzenia mam aplikację C# Windows Forms, która działa i przesyła dane do urządzenia. Obecnie staram się połączyć pięć różnych aplikacji w jedną, dzięki czemu możemy łatwo wprowadzać zmiany, łatwo dodawać nowe urządzenia i mieć standardowy interfejs użytkownika. Mój problem polega na tym, że nie wiem dokładnie, jak to zrobić, ponieważ nie wiem, które urządzenie będzie używane do czasu uruchomienia. Próbuję uniknąć wielu instrukcji if i chciałbym móc umieścić każde urządzenie w oddzielnym pliku. Oto trochę psudo-kodu tego, o czym mówię.Jak można wdrożyć wiele klas, które mają te same metody, które robią różne rzeczy?
class Device //This is what EVERY device can do
{
...
DoWork1();
DoWork2();
DoWork3();
...
}
class Device1
{
...
DoWork1(); //This is how the work is done for this device
DoWork2();
DoWork3();
...
}
class Device2
{
...
DoWork1(); //This is how the work is done for this device (not the same way as Device1)
DoWork2();
DoWork3();
}
public partial class frmMain : Form
{
private (some kind of object or something) CurrentDevice;
public frmMain()
{
...
//Determine what device (could be one of five) is currently being used
CurrentDevice = (which device is currently being used)
//Could be CurrentDevice = new Device1();
}
}
private void Button1_Click()
{
CurrentDevice.DoWork1(); //But this could be Device1.DoWork1() or Device2.DoWork1(), depending on what device is currently being used (which was determined in the frmMain constructor)
}
Nie jestem pewien, ale myślę, że mogę użyć interfejsu lub może dziedziczyć klasę Device1 dla klasy urządzeń i zastąpić metody ... Ale nie wiem, jak bym mają jeden ogólny sposób powiedzenia CurrentDevice.DoWork1(), ponieważ CurrentDevice może być Device1 lub Device2.
Wszelkie pomysły będą mile widziane. Używam Visual Studio 2008 z .NET 3.5 na Windows XP SP3 i Windows 7.
Mam nadzieję, że opisałem problem wystarczająco dobrze. Jeśli nie, lub nie wspomniałem o czymś, co powinienem, proszę dać mi znać. Jestem nowy w stackoverflow i C#.
Dziękuję
Michaela
Chciałbym podziękować wszystkim za pomoc i sugestie. Postanowiłem pójść z rozwiązaniem dostarczonym przez Syzyfa, ponieważ pasuje on do mojej obecnej aplikacji. Wszyscy mieli na ten temat świetny wkład i dziękuję wam wszystkim. :) – Michael