DateTime



  • Hallo,

    ich habe während meines Elektrotechnik Studiums neben Matlab als "echte" Programmiersprache nur C++ gelernt. Jemand Bekanntes lernt gerade im Rahmen seines Studiums C# und mit meinem C++-Kenntnissen kann ich da auch schon ganz gut helfen, habe jetzt aber ein Problem:

    class Person
    {
    
        DateTime birthday;
    
    }
    

    Es soll in einer Klasse jemandes Geburtsdatum in einem struct DateTime gespeichert werden. Wie kann ich über ein Objekt vom Typ Person auf sein "birthday" zugreifen?

    Ich habe versucht mit

    class Person zu machen.
    {
    
        public DateTime date(1,1,1);
    
    }
    

    den struct direkt zu setzen, was nicht funktioniert, genauso wenig das innerhalb eines Konstruktors von Person zu machen.

    In der Main-Funktion kann ich auch nicht auch nicht einfach über den Konstruktor date setzen:

    Person test=new Person();
    test.date(1,1,1) // Klappt nicht
    test.date.Year=1; // usw. klappt auch nicht
    

    Die Frage lautet: Wie kann ich, wenn ich innerhalb einer Klasse einen Struct/Klasse als Attribut habe, die Attribute dieser setzen? Am besten eine Möglichkeit dies direkt mit einem Konstruktor zu tun, aber es sollte auch im Nachhinein möglich sein diese zu ändern. Bin sehr dankbar, wenn mir geholfen werden kann.

    Grüße,
    Erano1[/code]



  • Bei C# muß man die Sichtbarkeit explizit bei jedem Member setzen, d.h.

    class Person
    {
        public DateTime birthday;
    }
    

    Noch besser sind allerdings hier Eigenschaften (Properties) - welche per Namenskonvention mit einem Großbuchstaben beginnen:

    class Person
    {
        public DateTime Birthday { get; set; }
    }
    

    Zugriff dann normal mittels '.':

    Person person = new Person();
    person.Birthday = DateTime.Now;
    

    Und mittels Konstruktor:

    class Person
    {
        public Person(DateTime birthday)
        {
           Birthday = birthday;
        }
    
        public DateTime Birthday { get; private set; }
    }
    

    (mittels des 'private' vor 'set' kann die Eigenschaft von außen nur noch gelesen werden, nicht mehr nachträglich gesetzt)

    PS: Direktes Initialisieren einer Membervariablen geht so:

    class Person
    {
       public DateTime birthday = new DateTime(2000, 1, 1);
    }
    

    Ich habe zwar auch damals C# von C++ kommend gelernt (anhand der C#-Spec), aber empfehlen kann ich dir (bzw. deinem Freund) das OpenBook Visual C# sowie guide to C#.



  • Hallo Th69,

    das hat mir sehr weitergeholfen! Vielen Dank. An das set und get muss ich mich noch gewöhnen 😛 Aber das größte Problem war, dass in meiner Vorstellung mit DateTime birthday birthday schon ein Objekt von DateTime ist, und ich nicht zusätzlich noch birthday= new DateTime(...) machen muss.

    Grüße,
    Erano1


Anmelden zum Antworten