Entwickler-Ecke
C# - Die Sprache - Objektbeziehungen
Benji2811 - Di 29.11.11 12:33
Titel: Objektbeziehungen
Hallo,
ich habe ein kleines Problem. Möchte ein Programm schreiben, hänge aber bei den Objektbeziehungen fest. Ich habe eine Klasse "Photovoltaikmodul" für die im Konstruktor die Fläche gesetzt wird. Anschließend eine Klasse "Gebäude" wo ebenfalls im Konstruktor eine Variable Stromverbrauch gesetzt wird. Im Konstruktor möchte ich dem Gebäude aber auch ein Photovoltaikmodul mitgeben, sowie den von Gebäude abgeleiteten Klassen.
Mein bisheriger Code:
C#-Quelltext
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:
| class Photovoltaikmodul { private double fläche;
public Photovoltaikmodul(double fläche) { this.fläche = fläche; } }
class Gebäude { public double stromverbrauch;
public Gebäude(double stromverbrauch, *hier möchte ich auch ein Photovoltaikmodul setzen*) { this.stromverbrauch = stromverbrauch; } }
class Einfamilienhaus : Gebäude { public Einfamilienhaus(double stromverbrauch, *Photovoltaikmodul*) : base(stromverbrauch, *Photovoltaikmodul*) { this.stromverbrauch = stromverbrauch; } }
class Program { static void Main(string[] args) { Gebäude h1 = new Einfamilienhaus(5000); *hier soll eben noch ein new Photovoltaikmodul dazu!!!* Gebäude h2 = new Einfamilienhaus(5000); } } |
Ich denke das sollte mit Aggregation gehen, kenne mich damit aber nicht wirklich aus und mit Literatur aus dem Internet bin ich auch nicht viel schlauer geworden.
Hoffe ihr könnt mir weiterhelfen, wenn möglich gleich den Code überschreiben/erweitern, damit ich endlich verstehe!?
Vielen Dank und lg,
Benji
Moderiert von
Th69: C#-Tags hinzugefügt
mats74 - Di 29.11.11 16:38
Hallo Benji und :welcome:
Ich habe keine Ahnung, warum Du die Klassen so gebrauchen und zusammenstellen willst.
Ich habe die Klassen einfach mal so gesetzt, dass sie funktionieren.
C#-Quelltext
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:
| class Photovoltaikmodul { public double Photovoltaikmodul(double fläche) { double wert = fläche; return wert; } }
class Gebäude { public double Gebäude(double stromverbrauch) { double wert = stromverbrauch; return wert; } }
class Einfamilienhaus { public double[] Einfamilienhaus(double photovaltarik, double gebäude) { double[] wert = new double[2]; wert[0] = photovaltarik; wert[1] = gebäude; return wert; } }
class Program { static void Main(string[] args) { double Gebäudewert1 = Convert.ToDouble(new Einfamilienhaus().Einfamilienhaus(Convert.ToDouble(new Photovoltaikmodul().Photovoltaikmodul(1).ToString()), Convert.ToDouble(new Gebäude().Gebäude(1).ToString()))[0].ToString()); double Gebäudewert2 = Convert.ToDouble(new Einfamilienhaus().Einfamilienhaus(Convert.ToDouble(new Photovoltaikmodul().Photovoltaikmodul(1).ToString()), Convert.ToDouble(new Gebäude().Gebäude(1).ToString()))[1].ToString()); } } |
Ob diese Struktur sinnvoll ist für deine Anwendung, weiss ich nicht.
Vielleicht hilft Dir der Code bei deiner Problemstellung (die ich nach deiner Beschreibung nicht wirklich verstanden habe).
Benji2811 - Di 29.11.11 17:03
Danke für die Antwort, leider kann ich diesen Code nicht verwenden, die Struktur der Klasse"Photovoltaikmodul" habe ich fix vorgegeben und darf sie nicht verändern, auch für die Klassen Gebäude und deren abgeleiteten Klassen habe ich Vorgaben.
Das Problem ist, dass ich in der Klasse "Gebäude" das Photovoltaikmodul setzen möchte, also "public Gebäude(double stromverbrauch, Photovoltaikmodul)" um damit in der abgeleiteten Klasse Einfamilienhaus nur mehr sagen muss "public Einfamilienhaus(double stromverbrauch, Photovoltaikmodul) : base(stromverbrauch, Photovoltaikmodul)". Im Programm will ich dann noch zb. ein Haus erstellen mit Gebäude haus = new Einfamilienhaus(5000) +!!! new Photovoltaikmodul; Hab das so ähnlich mal gesehen, kann mich aber nicht mehr wirklich daran erinnern.
Neuer Code, habe einen Fehler entdeckt, vl hilft er so hervorgehoben etwas zu verstehen worauf ich hinaus will:
C#-Quelltext
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:
| class Photovoltaikmodul { public Photovoltaikmodul(double fläche) { this.fläche = fläche; } }
class Gebäude { public double stromverbrauch;
public Gebäude(double stromverbrauch, Photovoltaikmodul ) { this.stromverbrauch = stromverbrauch; } }
class Einfamilienhaus : Gebäude { public Einfamilienhaus(double stromverbrauch, ) : base(stromverbrauch, *Photovoltaikmodul*) { this.stromverbrauch = stromverbrauch; } }
class Program { static void Main(string[] args) { Gebäude h1 = new Einfamilienhaus(5000) new Photovoltaikmodul Gebäude h2 = new Einfamilienhaus(5000)...
} } |
Yogu - Di 29.11.11 19:28
Benji2811 hat folgendes geschrieben : |
für die Klassen Gebäude und deren abgeleiteten Klassen habe ich Vorgaben. |
Erlauben die, dass du deine Klasse
Gebäude folgendermaßen erweiterst?
C#-Quelltext
1: 2: 3: 4: 5: 6: 7:
| class Gebäude { public double stromverbrauch; public Photovoltaikmodul photovoltaikmodul;
} |
Sonst kannst du einem Gebäude keine Photovoltaikmodul zuweisen. Wenn du das hat, kannst du im Konstruktur das Feld
photovoltaikmodul genauso wie
stormverbrauch setzen, musst nur noch die Namen anpassen.
Benji2811 hat folgendes geschrieben : |
um damit in der abgeleiteten Klasse Einfamilienhaus nur mehr sagen muss "public Einfamilienhaus(double stromverbrauch, Photovoltaikmodul) : base(stromverbrauch, Photovoltaikmodul)". |
Das ist dann möglich bzw. nötig.
Benji2811 - Di 29.11.11 20:14
Ja das geht bzw. ist nötig, soweit ich weiß nennt sich das dann Aggregation. Ich habe es auch schon so versucht, aber wie setze ich dann in der Klasse "Program" das new Photovoltaikmodul neben new Einfamilienhaus?
Yogu - Di 29.11.11 20:26
Benji2811 hat folgendes geschrieben : |
wie setze ich dann in der Klasse "Program" das new Photovoltaikmodul neben new Einfamilienhaus? |
Schlicht und einfach als zweiten Parameter :idea: Wie du das Objekt erstellst, hast du ja schon in deinen Kommentaren geschrieben.
Benji2811 - Di 29.11.11 20:52
Also sollte das so gehen:
C#-Quelltext
1:
| Gebäude h1 = new Einfamilienhaus() new Photovoltaikmodul(); |
Bei meinen bisherigen Versuche spuckt er mir Fehler aus, aber ich schau es mir nochmal genauer an.
Danke für die Hilfe bisher!!!
lg Benji
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!