myCSharp.de - DIE C# und .NET Community
Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 
 | Suche | FAQ

» Hauptmenü
myCSharp.de
» Startseite
» Forum
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Suche
» Regeln
» Wie poste ich richtig?
» Forum-FAQ

Mitglieder
» Liste / Suche
» Wer ist wo online?

Ressourcen
» openbook: Visual C#
» openbook: OO
» Microsoft Docs

Team
» Kontakt
» Übersicht
» Wir über uns

» myCSharp.de Diskussionsforum
Du befindest Dich hier: Community-Index » Diskussionsforum » Entwicklung » Rund um die Programmierung » Tipp zur Implementierung auswählbarer Hardware API (static class methoden auswählbar)
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | Thema zu Favoriten hinzufügen

Antwort erstellen
Zum Ende der Seite springen  

Tipp zur Implementierung auswählbarer Hardware API (static class methoden auswählbar)

 
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
Flo1989 Flo1989 ist männlich
myCSharp.de-Mitglied

Dabei seit: 04.12.2020
Beiträge: 2
Entwicklungsumgebung: Visual Studio Community 2019
Herkunft: Bayern


Flo1989 ist offline

Tipp zur Implementierung auswählbarer Hardware API (static class methoden auswählbar)

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo,

bin in C# noch relativer Neuling und komme eher aus der hardwarenahen Programmierung.

Ich würde gerne in einem Projekt die Hardware auswählbar machen. Aktuell hab ich nur eine (PEAK-CAN USB) dafür gibts eine XCP-API die mir eine statische Klasse bereitstellt um die Methoden auszufürhten. Ich würde nun gerne eine art Klasse als Schnittstelle nehmen die je nach initialer auswahl die Methoden der PEAK-CAN Hardware aufruft oder einer zukünftig implementierten Hardware über Serial-COM etc.

Ich hab schon Schnittstelle genannt aber komm in meinen Gedanken auf keinen grünen zweig wies funktionieren soll.

Folgender Code ist nur zur Veranschaulichung gedacht, wie ich es in etwa gerne hätte. Funktioniert natürlich nicht!!

Vielen Dank schon mal für Antworten und Anregungen!

C#-Code:
class GUI
{
    HardwareInterface hrdwr;
    GUI(int iHardwareEnum)
    {
        hrdwr = new HardwareInterface(iHardwareEnum);
    }
    void HardwareConnect()
    {
        hrdwr.Connect();
    }
}

public class HardwareInterface
{
    public HardwareInterface(int iHardwareSelect)
    {
        //if iHardwareSelect == Peak-CAN implement XCPApiPeak else == Serial-COM implement Serial-COM API
    }

    public void Connect()
    {

    }
}

public static class XCPApiPeak
{
    public static void Connect(void);

}

public static class SerialCOM
{
    public static void Connect(void);
}
04.12.2020 22:47 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Abt
myCSharp.de-Team

avatar-4119.png


Dabei seit: 20.07.2008
Beiträge: 14.447
Herkunft: BW


Abt ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Im Endeffekt alles mit Basics der Objektorientierten Programmierung umzusetzen.
Dazu brauchst Du nur
- Ein gemeinsames Interface
- Spezifische Implementierungen der Hardware
- Eine Factory die eine Instanz je nach Hardware zurück gibt

C#-Code:
namespace MyNamespace
{
    public interface IMyHardwareInterface
    {
        void Connect();
    }

    public class XCPApiPeakInterface : IMyHardwareInterface
    {
        public void Connect() => throw new System.NotImplementedException();
    }

    public class SerialCOM : IMyHardwareInterface
    {
        public void Connect() => throw new System.NotImplementedException();
    }

    public enum MyHardwareInterfaceType
    {
        XCPApi,
        SerialCOM
    }

    public class MyHardwareInterfaceFactory
    {
        public IMyHardwareInterface GetInstance(MyHardwareInterfaceType type) // oder enum oder whatever
        {
            switch (type)
            {
                case MyHardwareInterfaceType.XCPApi:
                    return new XCPApiPeakInterface();
                case MyHardwareInterfaceType.SerialCOM:
                    return new SerialCOM();
            }

            throw new ArgumentOutOfRangeException($"Unknown type {type}");
        }
    }
    public class MyApp
    {
        public void Sample(MyHardwareInterfaceFactory factory)
        {
            IMyHardwareInterface instance = factory.GetInstance(MyHardwareInterfaceType.XCPApi);

            instance.Connect();
        }
    }
}

Aber im Endeffekt kommen bei solch einer Anforderung mehrere potentiellen Pattern in Frage.
Kannst Dich ja bisschen selbst schlau machen:  https://www.dofactory.com/net/design-patterns
04.12.2020 23:13 Beiträge des Benutzers | zu Buddylist hinzufügen
Flo1989 Flo1989 ist männlich
myCSharp.de-Mitglied

Dabei seit: 04.12.2020
Beiträge: 2
Entwicklungsumgebung: Visual Studio Community 2019
Herkunft: Bayern

Themenstarter Thema begonnen von Flo1989

Flo1989 ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Vielen Dank! Funktioniert!
Super Link mit den Design Patterns, kannte ich noch nicht!
05.12.2020 00:32 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Baumstruktur | Brettstruktur       | Top 
myCSharp.de | Forum Der Startbeitrag ist älter als ein Monat.
Der letzte Beitrag ist älter als ein Monat.
Antwort erstellen


© Copyright 2003-2021 myCSharp.de-Team | Impressum | Datenschutz | Alle Rechte vorbehalten. | Dieses Portal verwendet zum korrekten Betrieb Cookies. 17.01.2021 03:46