aicher1998
Goto Top

CSharp Überladung mehrerer optionaler Parameter des gleiches Types bei gleicher Paramteranzahl

Hallo

Ich habe eine Funktion wie zum Beispiel
public void G1(double Xnnn, double Ynnn, double Znnn)

Ich möchte aber auch folgende Funktionen verwenden:
public void G1(double Xnnn, double Ynnn)
public void G1(double Xnnn, double Znnn
public void G1(double Ynnn, double Znnn)

Leider macht es keinen Sinn anstatt den Parameter zu übergeben, 0 übergebe wie z.B. so
public void G1(double Xnnn=0, double Ynnn=0, double Znnn=0)

Ich dachte mir eine Enumeration zu machen die als Parameter hinzugefügt werden muss, die dann halt die Inhalte X, Y, Z, XY, XZ, YZ und Z hat und angibt, welche Parameter davon verwertet werden sollen, was mir aber bissl zu unprofessionell erscheint.
Dasselbe mit G1_X, G1_Y, G1_Z, G1_XY, ...

Jemand eine Idee?

Gruß
Christopher

Content-Key: 333255

Url: https://administrator.de/contentid/333255

Ausgedruckt am: 19.03.2024 um 10:03 Uhr

Mitglied: atze187
atze187 28.03.2017 um 15:52:17 Uhr
Goto Top
Hi,

Visual Studio wird die Variante mit zwei Parametern nicht kompilieren. Selbst wenn es ginge wäre das ganz schlechter Stil. Benenne deine Funktionen nach dem was sie machen. Das Minimum wäre in den von dir angeführten Beispielen (was auch immer G1 machen sollen):

public void G1_FromXY(double Xnnn, double Ynnn)
public void G1_FromXZ(double Xnnn, double Znnn
public void G1_FromYZ(double Ynnn, double Znnn)

Das macht den Code leserlicher, dadurch nachvollziehbar und damit wiederum wartbar.

Gruß,
André
Mitglied: Aicher1998
Aicher1998 28.03.2017 um 21:47:32 Uhr
Goto Top
Zitat von @atze187:

Hi,

Visual Studio wird die Variante mit zwei Parametern nicht kompilieren. Selbst wenn es ginge wäre das ganz schlechter Stil. Benenne deine Funktionen nach dem was sie machen. Das Minimum wäre in den von dir angeführten Beispielen (was auch immer G1 machen sollen):

> public void G1_FromXY(double Xnnn, double Ynnn)
> public void G1_FromXZ(double Xnnn, double Znnn
> public void G1_FromYZ(double Ynnn, double Znnn)
> 

danke.
Ich bräuchte dann aber

  • G1_FromX
  • G1_FromY
  • G1_FromZ
  • G1_FromXY
  • G1_FromXZ
  • G1_FromYZ
  • G1_FromXYZ

Und das Problem ist, dass ich eigentlich auch noch einen Parameter S hätte
Also:

  • G1_FromX
  • G1_FromY
  • G1_FromZ
  • G1_FromS
  • G1_FromXY
  • G1_FromXZ
  • G1_FromXS
  • G1_FromYZ
  • G1_FromYS
  • G1_FromZS
  • G1_FromXYZ
  • G1_FromXYS
  • G1_FromXZS
  • G1_FromYZS

Was bisschen aufwendig wäre.
Ich mach jetzt einfach eine Strcuture oder Class

public class Options_G1
{
    public double X {get; set;}
    // usw...
}