Suche Eigenschaftsmethoden

Hallo, ich suche so etwas wie Eigenschaftsmethoden aber nicht getter und setter sondern, dass ich eigene Funktionen oder Eigenschafeten Programmieren kann. Meine Klasse heisst "Fenster" únd ich will sie nachher so aufrufen:

(code nur ausgedacht)
Code:
Fenster.Erdgeschoss.Wohnzimmer.FensterVorne = Fenster.offen;
funktioniert so etwas?
Wenn ja wie?
Vielen Dank im Voraus
 

Shakie

Erfahrenes Mitglied
Der Typ der Eigenschaft "Erdgeschoss" ist eine Klasse, die eine Eigenschaft "Wohnzimmer" hat. Der Typ der Eigenschaft "Wohnzimmer" ist eine Klasse, die eine Eigenschaft "FensterVorne" hat. Du verschachtelst also Klassen.
 

DrMueller

Erfahrenes Mitglied
Die Frage hier wäre, was genau du denn eigentlich bezwecken willst.
Bei Kompositionen sollte immer eine"Hat ein" Beziehung bestehen, während bei Interfaces resp. abstrakten Klassen immer eine "Ist ein" Beziehung bestehen sollte.
Daher:
Erdgeschoss hat ein Wohnzimmer hat ein FensterVorne
Fenster hat ein Erdgeschoss¿
 
Zuerst einmal sei gesagt, dass Eigenschaften nur getter und setter zulassen. Bleiben wir mal bei dem Beispiel: Eine Fenster-Klasse hat bestimmt auch eine Methode "void Open();". Jetzt ist die Frage, ob du eine vorhandene Klasse als Eigenschaftentyp oder eine eigene. Wenn du eine eigene Klasse benutzt, dann füge einfach eine passende Methode hinzu.

mfg
JustShinigami
 
Also erstmal vielen Dank für die Antworten.
Nun ist mir klar dass das nur mit verschachtelten Klassen geht.

@DrMueller:

Erdgeschoss hat ein Wohnzimmer hat ein FensterVorne
Fenster hat ein Erdgeschoss¿
Also das erste stimmt:
Erdgeschoss hat ein Wohnzimmer hat ein FensterVorne.
Aber Fenster im Erdgeschoss.
So meinte ich das falls es nicht klar war.
Besser ist vielleicht doch ich nehme die Einzelnen Stockwerke und Zimmer, in jedem es dann wieder Fenster gibt.
Etwa so:
Code:
Erdgeschoss.Wohnzimmer.Fenster.vorne = Fenster.open();
So erscheint mir das sinnvoller.
Nun ist mir das mit den geschachtelten Klassen noch nicht ganz klar, wenn mir das jemand erklären könnte am Besten mit meinem Beispiel wäre ich froh :)

PS: Die getter und setter Methoden sind auch ganz nützlich.
 
Ich geh jetzt mal davon aus, dass du die Klassen "Fenster" & Co. selbst geschrieben hast.
Du brauchst also kein = Fenster.open();
Mach doch gleich so:
C#:
Erdgeschoss.Wohnzimmer.Fenster["Vorne"].Open();

Das mit den geschachtelten Klassen ist einfach. Ich demonstriere es dir, indem ich eine Eigenschaft in C# und danach eine Erklärung schreibe:

C#:
private Storey _erdgeschoss;
...
public Storey Erdgeschoss
{
    get
    {
        return this._erdgeschoss;
    }
    set
    {
        this._erdgeschoss = value;
    }
}

So, du siehst hier jetzt ein privates Feld _erdgeschoss vom Typ Storey (Stockwerk/Etage). Diese Etage hat auch Räume, in einer Klasse "Room". Dann schauen wir mal die Klasse "Room" an:

C#:
public class Room
{
    private Dictionary<string, Window> _fenster;
    ...

    public Dictionary<string, Window> Fenster
    {
        get
        {
            return this._fenster;
        }
        set
        {
            this._fenster = value;
        }
    }
}

Also wenn du dann folgendes machst:
C#:
Erdgeschoss.Wohnzimmer.Fenster;
Dann bekommst du erst über den Getter von der Eigenschaft "Wohnzimmer" die Instanz des Raumes vom Typ "Room" und dann über den Getter der Eigenschaft "Fenster" die Instanz der Fensterliste vom Typ Window des Wohnzimmers. Du kannst also dann immer auf alle Methoden und Eigenschaften der Instanz, die du über den Getter bekommst, zugreifen, und das machst du auch. Ist es verständlich? :)

PS: Die Klasse Dictionary ist von mir hier benutzt worden, aber nur weil ich es für sinnvoller halte. Was und wie du es benutzt ist natürlich dir überlassen, es geht hier hauptsächlich um die Verschachtelung in den Eigenschaften.

Mfg JustShinigami
 
Vielen Dank JustShinigami das mit den geschachtelten Klassen ist mir jetzt klar.
Jetzt gehts ans Programmieren :)
Noch mal Dank an alle
Computerfreak90