Verschachtelte Klassen
-
Ich arbeite gerade an einem Funktions-Ploter. Ich habe ein Interface um eine Funktion zu beschreiben:
interface Function{ decimal evaluate(decimal); }
(decimal und kein double weil ich Fixpunkt-Arithmetik brauche.)
Desweiteren habe ich ein selbst geschriebenes Widget auf welches gezeichnet werden soll.class MyWidget: ... { public void Zoom(...){ ... } }
Um das Zeichnen zu beschleunigen will ich für jede Function die geplotet wird die berechneten Werte speichern. Darum erstelle ich eine Unterklasse in MyWidget. Es soll jedoch auch möglich sein die Farbe eines Function-Plots ein zu stellen, deswegen füge ich der Unterklasse eine Eigenschaft hinzu und mache sie public.
class MyWidget: ... { public class Plot{ Color color{ ... } void UnPlot(); ...Irgendwie werden Punkte gespeichert... } Plot PlotFunction(Function f){ ... } public void Zoom(...){ ... } }
Das Problem ist jetzt, dass wenn Zoom aufgerufen wird müssen die Punkte neu berechnet werden. Das heißt die äußere Klasse benötigt Zugriff auf die privaten Daten der inneren Klasse. Geht aber nicht. Ich kann den Zugriff auch nicht public machen, da sonst jeder die Skala für jede Funktion beliebig einstellen könnte.
In Java würde ich eine nicht statische innere Klasse verwenden. In C++ würde die innere Klasse einen Zeiger auf die äußere erhalten und die Zoom Methode würde einfach die privaten Teile der Inneren verändern. Wie macht man das in C#?
-
internal