Laden...

Klasse zur Laufzeit austauschen

Erstellt von icolor vor 10 Jahren Letzter Beitrag vor 10 Jahren 1.504 Views
Thema geschlossen
I
icolor Themenstarter:in
115 Beiträge seit 2008
vor 10 Jahren
Klasse zur Laufzeit austauschen

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.

849 Beiträge seit 2006
vor 10 Jahren

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.

709 Beiträge seit 2008
vor 10 Jahren

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

I
icolor Themenstarter:in
115 Beiträge seit 2008
vor 10 Jahren

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

Hinweis von herbivore vor 10 Jahren

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.

64 Beiträge seit 2012
vor 10 Jahren

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

Hinweis von herbivore vor 10 Jahren

Weiteres Stichwort: Dependency Injection

Thema geschlossen