Forum: PC-Programmierung C# Was für eine Art Klasse ?


von Azubi (Gast)


Lesenswert?

Hallo,

Ich bearbeite gerade ein Tutorial für C# und in einer Lösung zu den 
Aufgaben ist mir folgendes aufgefallen. Ich habe zwei Klassen:


1
  public class Video
2
    {
3
        public int Id { get; set; }
4
        public string Name { get; set; }
5
        public DateTime ReleaseDate { get; set; }
6
        public Genre Genre { get; set; }
7
        
8
    }
9
10
11
public class Genre
12
    {
13
        public byte Id { get; set; }
14
        public string Name { get; set; }
15
        public ICollection<Video> Videos { get; set; }
16
17
        public Genre()
18
        {
19
            Videos = new Collection<Video>();
20
        }
21
    }

Ich kann aber mit "
1
public Genre Genre { get; set; }
" nichts anfangen. Was genau ist das und nach was müsste ich googeln um 
mehr zu erfahren

Danke und Gruß!

von Sven K. (quotschmacher)


Lesenswert?

ein objekt der klasse genre (dadrunter definiert) mit dem namen "Genre"

von Micha (nichtgast)


Lesenswert?

Hiho,

das sind so genannte Properties. Die macht man in C# antselle von Get() 
und Set() Methoden.

Die gibts in zwei Ausführungen.

Einmal die einfachen, wie du sie hast. Damit kannst du vor allem die 
Erreichtbarkeit steuern.

z.bsp
1
class foobar{
2
    public int foo { get;set;}
3
    public int bar { get; private set;}
4
}
5
6
foobar my = new foobar();

jetzt kannst du auf foo von außen lesend und schreibend zugreifen.
1
   my.foo = 5;  // geht
2
   Console.WriteLine(my.foo); //geht

auf bar kannst du von außen nur lesend zugreifen, aber in den 
Klassenmethoden setzen.
1
   my.bar = 5; // <- Fehler
2
   Console.WriteLine(my.bar); // geht


Dann gibts da noch die Fullproperties. Die sehen ähnlich aus sind aber 
komplexer und bieten mehr Möglichkeiten
1
class foobar{
2
    public int Foo{ get {return foo;}
3
                    set {foo=value}    };
4
    private int foo;
5
}

das macht erst mal das gleiche, wie das einfache property. Du könntest 
aber jetzt z.Bsp eine Bereichsüberprüfung beim setzen einführen.
1
class foobar{
2
    public int Foo{ get {return foo;}
3
                    set { if (value <0 && value >5) 
4
                              throw new ArgumentOutOfRangeException()
5
                          foo = value;}
6
                  };
7
    private int foo;
8
}


Hoffe, das hilft ein wenig

von Dr. Sommer (Gast)


Lesenswert?

Keiner N. schrieb:
> if (value <0 && value >5)

Eine Zahl wird wohl kaum gleichzeitig kleiner 0 und größer 5 sein...

von Micha (nichtgast)


Lesenswert?

Dr. Sommer schrieb:
> Keiner N. schrieb:
>> if (value <0 && value >5)
>
> Eine Zahl wird wohl kaum gleichzeitig kleiner 0 und größer 5 sein...

Upsi, in der Eile den falschen Operator hingeschrieben.

Schön, dass dir nichts anderes aufgefallen ist. Z.Bsp diverse fehlende 
';'. Aber es geht ja vor allem ums Prinzip dahinter.

#define || && :)

: Bearbeitet durch User
von Azubi (Gast)


Lesenswert?

Also entspricht
1
   public Genre Genre { get; set; }

entspricht also :
1
 Genre Genre = new Genre();

???

von Micha (nichtgast)


Lesenswert?

1
 Genre Genre = new Genre();

Das geht so eh nicht. der Variablenname kann nicht dem Klassennamen 
gleich sein.


Nein, es ist nur eine Deklaration. Eine Initialierung erfolgt nicht.
1
  public Genre genre {private get; private set; }  = new Genre();

Wäre äquivalent. Das meckert der Compiler aber so an. Deine Variable ist 
halt privat und das macht man nicht als Property.

Aber das ist Blödsinn. Mal von dem kleinen Fehler mit dem Namen gibt es 
keinen grund das so zu machen, wie du es getan hast.

Erst, wenn das von außen sichtbar sein soll, würde ich ein Property 
draus machen. Für Klasseninterne Variablen brauchst du das nicht.

: Bearbeitet durch User
Beitrag #5924717 wurde vom Autor gelöscht.
von Azubi (Gast)


Lesenswert?

Viel DAnk!

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.