Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Klasse zur Laufzeit austauschen
icolor
myCSharp.de - Member



Dabei seit:
Beiträge: 116
Herkunft: aus dem Ei

Themenstarter:

Klasse zur Laufzeit austauschen

beantworten | zitieren | melden

Hallo,
ich habe zwei Klassen, die im Prinzip die selben Funktionen enthalten, worin aber die Funktionen (in Abhängigkeit zur Datenbank) anders agieren.
Nun möchte ich, je nach angemeldetem Benutzer, zur Laufzeit entweder mit Klasse A oder mit Klasse B arbeiten. Beide Klassen werden aber durch ein New

ClassA theClass = new ClassA()

bzw.

ClassB theClass = new ClassB()

erzeugt.
Wie müsste ich jetzt eine Funktion schreiben, die mir zur Laufzeit die korrekte Klasse zur Verfügung stellt?

Ich habe jetzt einige Zeit kein C# mehr programmiert und stehe grade hier wie ein Blöder. - Was ihr nach der Frage auch sicher denkt.
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von icolor am .
private Nachricht | Beiträge des Benutzers
unconnected
myCSharp.de - Member

Avatar #avatar-3200.jpg


Dabei seit:
Beiträge: 862
Herkunft: Oerlinghausen/NRW

beantworten | zitieren | melden

Hallo,

Du müsstest dir ein Interface schreiben das beide Klassen implementieren, und dann zur laufzeit per Reflection (Activator.CreateInstance()) oder hardgecoded (if benutzer == "helge") entweder die eine oder andere Klasse instanzieren.

Grüße.
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von unconnected am .
private Nachricht | Beiträge des Benutzers
pinki
myCSharp.de - Member

Avatar #avatar-4072.jpg


Dabei seit:
Beiträge: 703
Herkunft: OWL

beantworten | zitieren | melden

Hallo icolor,
wenn ClassA und ClassB ein gemeinsames Interface implementieren, dann kannst du z.B. auch folgendes schreiben:

IClasses theClass = new ClassA();
bzw.
IClasses theClass = new ClassB();

Für das Realisieren der Auswahl gibt es mehrere Möglichkeiten, wie z.B.:

IClasses theClass = null;
switch (userSetting) {
    case UserSetting.SettingA:
        theClass = new ClassA();
        break;

    case UserSetting.SettingB:
        theClass = new ClassB();
        break;

    default:
        theClass = new ClassC();
        break;
}

Gruß
pinki
private Nachricht | Beiträge des Benutzers
icolor
myCSharp.de - Member



Dabei seit:
Beiträge: 116
Herkunft: aus dem Ei

Themenstarter:

beantworten | zitieren | melden

Könntest Du das noch einmal für Doofe erklären, bitte?

Moderationshinweis von herbivore (20.11.2013 - 21:20:09):

Sorry, nein, siehe [Hinweis] Wie poste ich richtig? Punkt 1.1.1. Und schon gar nicht ohne konkrete Nachfrage bzw. ohne konkreten Hinweis, was genau du nicht verstanden hast.

private Nachricht | Beiträge des Benutzers
EifelYeti
myCSharp.de - Member

Avatar #avatar-3408.jpeg


Dabei seit:
Beiträge: 66
Herkunft: Eifel

beantworten | zitieren | melden

Siehe Strategy pattern.

Du hast eine "Basisklasse" in der du einfach nur die Leeren Methoden hast. Hier ist noch keine Funktion gegeben.

Dann implementierst du die Funktionen in deinen Klassen. KlasseA und KlasseB

im Code verwendest du dann später:

Basisklasse variabeleKlasse = new KlasseA();

Wenn du jetzt dem Objekt aber lieber eine Instanz der KlasseB geben möchtest kannst du:


variableKlasse = new KlasseB();
verwenden.
Rekursion
(lat. , die) siehe Rekursion
private Nachricht | Beiträge des Benutzers

Moderationshinweis von herbivore (20.11.2013 - 21:22:35):

Weiteres Stichwort: Dependency Injection