Program.cs 6.01 KB
Newer Older
1
2
3
4
5
6
7
8
9
10
11
12
13
using System;

namespace _01KlassenWiederholung
{
    class Person
    {
        // Datenfelder/Member pro Objekt (OHNE Angabe von static)
        private string name;
        private string vorname;
        public int Alter3 { get; private set; }
        // Legt eine anonyme Variable an ~alter4711
        // plus eine öffentliche get-Methode plus eine private set-Methode
        private string telNr;
Uwe Wienkop's avatar
Uwe Wienkop committed
14
        private readonly int steuerIdentNummer=100;
15
16
17
        // readonly = Diese Variable darf nur im Konstruktor geändert werden
        //private DateTime gebDatum;

Uwe Wienkop's avatar
Uwe Wienkop committed
18

19
20
        // static Member/static Datenfelder (MIT Angabe von static)
        // Kommen nur einmal pro Klasse vor
Uwe Wienkop's avatar
Uwe Wienkop committed
21
22
        private static int naechsteIdentnummer = 0;
        private static Person[] personen = new Person[1000];
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64


        // get ~ gezielte Umgehung des private-Schutzes; liefert Wert zurück
        //       Name ("get") ist ohne Bedeutung
        private int alter;
        public int getAlter()
        {
            return alter;
        }
        // Alternative Schreibweise: Lambda-Ausdruck
        public int getAlter2() => alter;   // => ~ "wird abgebildet auf"

        // set ~ gezielte Umgehung des private Schutzes; setzt den Wert, 
        //       ermöglicht aber eine Wertebereichsüberprüfung
        //       Name ("set") ist wieder ohne Bedeutung
        public void setAlter(int wert)
        {
            if (wert < 0)
                throw new ArgumentOutOfRangeException("Alter muss > 0 sein");
            alter = wert;
        }
        // get&set in alternativer Schreibweise, zusammen als PROPERTY
        //   get und set sind optional, d.h. können auch entfallen
        public int Alter
        {
            get { return alter; }
            set
            {
                if (value < 0)
                    throw new ArgumentOutOfRangeException("Alter muss > 0 sein");
                alter = value;
            }
        }
        public int Alter2
        {
            get { return alter; }
            set { alter = value; }
        }
        // Automatisches Property für spätere Erweiterbarkeit
        public int Alter4 { get; private set; }
        // Öffentliches get, privates set

Uwe Wienkop's avatar
Uwe Wienkop committed
65
66
67
68
        static Person() 
        {
            Console.WriteLine("Statischer Konstruktor");
            naechsteIdentnummer = 100;
Uwe Wienkop's avatar
Uwe Wienkop committed
69
        }
Uwe Wienkop's avatar
Uwe Wienkop committed
70
71
72
        public Person(int stId)
        {
            steuerIdentNummer = stId;
Uwe Wienkop's avatar
Uwe Wienkop committed
73
74
            personen[naechsteIdentnummer++] = this;

Uwe Wienkop's avatar
Uwe Wienkop committed
75
        }
76
        // Konstruktor Person
Uwe Wienkop's avatar
Uwe Wienkop committed
77
        public Person(string name, string Vorname, int Alter, string TelNr = "")
78
        {
Uwe Wienkop's avatar
Uwe Wienkop committed
79
            this.name = name;
80
81
82
            vorname = Vorname;
            if (Alter < 0)
                throw new ArgumentOutOfRangeException("Das Alter muss >= 0 sein");
Uwe Wienkop's avatar
Uwe Wienkop committed
83
            Alter2 = Alter;
84
85
            telNr = TelNr;
            steuerIdentNummer = naechsteIdentnummer;
Uwe Wienkop's avatar
Uwe Wienkop committed
86

Uwe Wienkop's avatar
Uwe Wienkop committed
87
            personen[naechsteIdentnummer] = this;
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
            naechsteIdentnummer++;
        }
        // STATIC oder NICHT-STATIC???
        //public void SetzeIdentnummer(int nummer)
        //{
        //    if (nummer < naechsteIdentnummer)
        //        throw new ArgumentException("Falsche neue Identnummer");
        //    naechsteIdentnummer = nummer;
        //}
        public static void SetzeIdentnummer(int nummer)
        {
            if (nummer < naechsteIdentnummer)
                throw new ArgumentException("Falsche neue Identnummer");
            naechsteIdentnummer = nummer;
        }

        // static oder nichts (d.h. nicht-static)
        //      static: FUNKTION (z.B. Sqrt(25) --> 5) mit ihren Parametern
        //      nicht-static: METHODE (z.B. void Ausgabe() ), erhält zusätzlich
        //          zu ihren Parametern noch einen - impliziten - Zeiger
        //          auf das Objekt
        // Rückgabetyp der Funktion (z.B. int, double, void,
        //     aber auch der Klassenname ist zulässig)
        // ----- Funktions-/Methodenname
        // Parameter jeweils mit Datentyp

        public static void Ausgabe(Person p)
        {
            Console.WriteLine($"Name: {p.name}, Vorname: {p.vorname}");
        }
        public void Ausgabe()
        {
            Console.WriteLine($"Name: {name}, Vorname: {vorname}");
            //Console.WriteLine($"Name: {this.name}, Vorname: {this.vorname}");
        }
Uwe Wienkop's avatar
Uwe Wienkop committed
123
124
125
        public override string ToString() => $"Name: {name}, Vorname: {vorname}";
      

126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
    }


    // Bis hierher PROGRAMMIERER 1
    // =======================================================
    // Ab hier:    PROGRAMMIERER 2



    //class Vereinsmitglied
    //{
    //    Person mitglied;
    //    DateTime eintrittsdatum;
    //    bool mitgliedsbeitragBezahlt;
    //}

    class Program
    {

        static void Main(string[] args)
        {
Uwe Wienkop's avatar
Uwe Wienkop committed
147
            Console.WriteLine("Programmstart");
Uwe Wienkop's avatar
Uwe Wienkop committed
148
149
            //anton.SetzeIdentnummer(1000000); -- geht nicht, da anton noch nicht existiert
            //Person.SetzeIdentnummer(1000000);
Uwe Wienkop's avatar
Uwe Wienkop committed
150
            Console.WriteLine("Hier sind wir ...");
151
            Person anton = new Person("Müller", "Anton", 23);
Uwe Wienkop's avatar
Uwe Wienkop committed
152
153
            
            Console.WriteLine($"Anton: {anton}");
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
            anton.setAlter(24);
            anton.setAlter(anton.getAlter() + 1);
            Console.WriteLine(anton.Alter);
            anton.Alter = 24;
            anton.Alter += 1;
            Console.WriteLine($"Anton: {anton}");

            Person.Ausgabe(anton);
            // Aufruf als Funktion (static): Klassenname.Funktionsname()
            anton.Ausgabe();
            // Aufruf als Methode (nicht-static): Objektvar.Methodenname()


            Person[] persFeld = new Person[5];
            //// Feld mit 5 Referenzen auf Personen-Objekte
            persFeld[0] = new Person("Meier", "Dieter", 25);
            //// Für Eintrag 1 Speicher für eine Person anfordern

            Person claudia = new Person("Schuster", "Claudia", 23, "0911-234567");
            persFeld[1] = claudia;

            Console.WriteLine(anton);
            Console.WriteLine(persFeld[0]);
            Console.WriteLine(Math.PI.ToString());
        }
    }

}