mikrocontroller.net

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


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
Autor: Azubi (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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:


  public class Video
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public DateTime ReleaseDate { get; set; }
        public Genre Genre { get; set; }
        
    }


public class Genre
    {
        public byte Id { get; set; }
        public string Name { get; set; }
        public ICollection<Video> Videos { get; set; }

        public Genre()
        {
            Videos = new Collection<Video>();
        }
    }

Ich kann aber mit "
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ß!

Autor: Sven A. (quotschmacher)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ein objekt der klasse genre (dadrunter definiert) mit dem namen "Genre"

Autor: Keiner N. (nichtgast)
Datum:

Bewertung
0 lesenswert
nicht 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
class foobar{
    public int foo { get;set;}
    public int bar { get; private set;}
}

foobar my = new foobar();

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

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



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

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.
class foobar{
    public int Foo{ get {return foo;}
                    set { if (value <0 && value >5) 
                              throw new ArgumentOutOfRangeException()
                          foo = value;}
                  };
    private int foo;
}


Hoffe, das hilft ein wenig

Autor: Dr. Sommer (Gast)
Datum:

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

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

Autor: Keiner N. (nichtgast)
Datum:

Bewertung
0 lesenswert
nicht 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
Autor: Azubi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also entspricht
   public Genre Genre { get; set; } 

entspricht also :
 Genre Genre = new Genre(); 

???

Autor: Keiner N. (nichtgast)
Datum:

Bewertung
1 lesenswert
nicht lesenswert
 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.
  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.
Autor: Azubi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Viel DAnk!

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.