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
Platzhalter/Variable für Methoden [==> Strategie-Muster]
blutiger_anfänger
myCSharp.de - Member



Dabei seit:
Beiträge: 293
Herkunft: Meerbusch, NRW

Themenstarter:

Platzhalter/Variable für Methoden [==> Strategie-Muster]

beantworten | zitieren | melden

Hallo,

ich stehe vor folgendem Problem:

Mir sind zwei Methoden gegeben, die eine Zahl zurückgeben und identische Parameter annehmen.


private static int Preis1(string element)
        {
            int preis = 0;
            //Berechnugen Typ 1
            return preis ;
        }

private static int Preis2(string element)
        {
            int preis = 0;
            //Berechnugen Typ 2
            return preis ;
        }

Diese beiden Methoden möchte/soll ich nicht ändern.

Nun habe ich eine sehr komplexe Methode geschrieben, in der die erste der beiden oben genannten Methoden Verwendung findet.


private void gesamtPreisAusrechnen()
{
      int gespreis = 0;
      //Berechnungen ...
      gespreis += Preis1("produkt a");
      //Berechnungen ...
      gespreis += Preis1("produkt b");
      //usw.
}

Die ganze Gesamtberechnung müsste ich auch noch mal mit den Werten von Preis 2 machen.
Ich möchte aber ungerne den ganzen Code doppelt kopieren oder bei jedem Aufruf von Preis1 in gesamtPreisAusrechnen eine if-else-Abfrage machen.

Mit kam folgende Idee, jedoch weiß ich nicht, wie ich das umsetzen kann oder ob man sowas überhaupt in die Richtung umsetzen kann.


private void gesamtPreisAusrechnen(bool preis2Verwenden)
{
      private voidhalter preisMethode = null;
      if (preis2Verwenden)
      {
              preisMethode = Preis2;
      }
      else
      {
              preisMethode = Preis1;
      }

      int gespreis = 0;
      //Berechnungen ...
      gespreis += preisMethode("produkt a");
      //Berechnungen ...
      gespreis += preisMethode("produkt b");
      //usw.
}

EDIT: Gibt es eine Art Platzhalter für Methoden mit dem selben Parameter?

Viele Grüße,
Raffi
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von blutiger_anfänger am .
Wenn ich nicht hier bin, findest du mich auf code-bude.net.
private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 49.486
Herkunft: Berlin

beantworten | zitieren | melden

Hallo blutiger_anfänger,

das ist deine Frage?

Eigentlich egal, die Antwort ist Strategy-Pattern. :-)

herbivore
private Nachricht | Beiträge des Benutzers
blutiger_anfänger
myCSharp.de - Member



Dabei seit:
Beiträge: 293
Herkunft: Meerbusch, NRW

Themenstarter:

beantworten | zitieren | melden

Da hatte sich wohl ein Copy/Paste-Fehler eingeschlichen, aber dennoch hast du mein Anliegen ja erkannt. Danke für die Antwort, herbi! :)
Wenn ich nicht hier bin, findest du mich auf code-bude.net.
private Nachricht | Beiträge des Benutzers
nilres
myCSharp.de - Member



Dabei seit:
Beiträge: 60

beantworten | zitieren | melden

Eine andere Möglichkeit wäre ein Delegate zu verwenden.

Strategie-Pattern dürfte aber sauberer sein. Ich wollte es nur erwähnt haben.

Grüße
Nils
private Nachricht | Beiträge des Benutzers
gfoidl
myCSharp.de - Team

Avatar #avatar-2894.jpg


Dabei seit:
Beiträge: 6.865
Herkunft: Waidring

beantworten | zitieren | melden

Hallo nilres,

Strategie und Delegaten schließen sich ja nicht aus. Somit lässt sich auch mit Delegaten eine Strategie umsetzen.

Das GoF-Muster Strategie ist jedoch allgemeiner gehalten und verzichtet auf "Sprachfeatures" wie Delegaten.


mfG Gü

Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"
private Nachricht | Beiträge des Benutzers
ProgrammierTroll
myCSharp.de - Member

Avatar #avatar-3285.jpg


Dabei seit:
Beiträge: 107

beantworten | zitieren | melden

Wobei ich mit den Delegaten im Prinzip stark detallierte Interfaces definiere, darum seh ich nicht so den Sinn, zusätzlich noch mit Interfaces rumzufrickeln.
q.e.d.
private Nachricht | Beiträge des Benutzers
winSharp93
myCSharp.de - Experte

Avatar #avatar-2918.png


Dabei seit:
Beiträge: 5.742
Herkunft: Stuttgart

beantworten | zitieren | melden

Zitat von ProgrammierTroll
Wobei ich mit den Delegaten im Prinzip stark detallierte Interfaces definiere, darum seh ich nicht so den Sinn, zusätzlich noch mit Interfaces rumzufrickeln.
IMHO hängt das auch von der Länge der Berechnungen ab: Wenn diese etwas länger sind und evtl. von mehreren Stellen übergeben werden sollen, ist eine Klasse meist übersichtlicher.
private Nachricht | Beiträge des Benutzers