C# Was für eine Art Klasse ?

Gast #5924673
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ß!
#5924694
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
#5924713
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.
Beitrag #5924717 wurde von einem Moderator gelöscht.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren