Hi,
ich bin ganz neu in C# und habe ein Frage zu *Nested Classes*. Sollte ich damit altebekannte Themen anschneiden , Asche auf mein Haupt. Meine Netzsuche zu dem Thema war ausführlich, aber leider nur bedingt erfolgreich.
Situation
Ich möchte eine Klasse erstellen , die eine Farbe darstellt. Die Unterklassen stellen jeweils einen Farbraum dar. Jeder Farbraum enthält schreib und lesbare Farbkanäle. Die Hauptklasse enthält einen privaten RGB-satz, der zum Umrechnen und speichern der Farbe genutzt wird.
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19:
| Public class color { Private double cr,cg,cb;
Public class rgb { Private double r,g,b; }
Public class hsv { Private double h,s,v; }
Public class cmyk { Private double c,m,y,k; } } |
Dabei sollen alle errechenbaren Werte gesetzt werden , so dass sich folgendes Verhalten ergibt :
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| Private Color myColor = new Color(); Private double Hue = 0; Private double Red = 0;
myColor.RGB.Set(255,125,255); Hue = myColor.HSV.H; Red = myColor.RGB.R;
|
Problem
Mein Problem ist nun der Werteaustausch zwischen der Haupt und den Unterklassen. Die Hauptklasse enthält die privaten Doubles cr,cg und cb mit denen zwischen den Farbräumen umgerechnet werden soll.
Möchte ich nun von Color.HSV auf die Werte cr,cg,cb von Color zugreifen, so müsste ich diese als Static deklarieren , was natürlich nicht geht, da ich mehr als einen Farbwert speichern können möchte. Außerdem bereitet mir die Limitation des Schlüsselwortes this Probleme, bzw die Verknüpfung der Hauptklasse mit den nested classes.
Lösungsansatz
Mein Lösungsansatz ist folgender (stark zusammengefasst) :
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44:
| public class Color { public double r, g, b; public Color(double xr, double xg, double xb) { r = xr; g = xg; b = xb; } public class RGBpercent { private Color _cl; private double rp, gp, bp; public RGBpercent(Color cl) { _cl = cl; rp = _cl.r / 2.55; gp = _cl.g / 2.55; bp = _cl.b / 2.55; } public double _rp { get {return rp;} set {rp = value;} } } public double rPercent { get { RGBpercent me = new RGBpercent(this); return me._rp ; } set { RGBpercent me = new RGBpercent(this); me._rp = value; } } } |
Problem ist jedoch die 1-dimensionale Struktur (Problem Kanaldoubletten und Unübersichtlichkeit), sowie generell sehr schwerfälliger Code. Wie mache ich das besser ?
Vielen Dank für Eure Antworten im Vorraus.
Gruß,
minime
Moderiert von
Christian S.: Überflüssige Zeilenumbrüche entfernt