Autor Beitrag
smokydog
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 38



BeitragVerfasst: Mi 13.01.10 18:32 
Hallo zusammen.
Hab ein kleines Problem, und schaff einfach nicht eine schöne Lösung zu finden.

BasisKlasse
ausblenden C#-Quelltext
1:
2:
3:
4:
public abstract class Signal
{
public abstract double[] calcOutput(long StartPoint, long EndPoint, int Rate);
}

Erste geerbte Klasse.
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
public class DreiecksSignal : Signal
{
public override double[] calcOutput(long StartPoint, long EndPoint, int Rate)
{
 ....
 ....
 if(..)calcOutput(StartPoint + Weiter,EndPoint,Rate)
}
}

Vererbte Klasse
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
public class MehrfachDreiecksSignal : DreiecksSignal
{
public override double[] calcOutput(long StartPoint, long EndPoint, int Rate)
{
...
...
base.calcOutput(StartPoint, EndPoint, Rate);
}
}

Also hier liegt das Problem. Wenn ich in MehrfachDreiecksSignal die Funktion in der MutterKlasse aufrufe und in der MutterKlasse wieder calcOutput aufgerufen wird, lande er wieder in MehrfachDreiecksSignal. Meine Frage ist wie kann ich das verhindern. Kleine Anmerkung noch, new anstatt override habe ich auch schon probiert. Leider wird wenn ich einen Array von Typ Signal habe und dort ein MehrfachDreiecksSignal drin ist nicht die richtige Funktion aufgerufen, sondern die von DreiecksSignal.

Danke schonmal in voraus.
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Mi 13.01.10 19:27 
Signal.calcOutput soll sich also rekursiv selbst aufrufen? Dann lagere den Code aus.

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
public class DreiecksSignal : Signal
{
calcSingleOutput(...)
{
 ....
 ....
 if(..)calcSingleOutput(StartPoint + Weiter,EndPoint,Rate)
}

public override double[] calcOutput(long StartPoint, long EndPoint, int Rate)
{
    calcSingleOutput(...);
}
}


PS: Methoden werden groß, Parameter klein geschrieben.

_________________
>λ=