static void Main(string[] args)
        {
            Console.WriteLine("=== Klassenbibliothek verwenden === ");

            Console.WriteLine("\n--- Datentypen ---");

            Console.WriteLine("CharDefault: {0}", Types.ZeigeCharDefault('d'));;

            Console.WriteLine("ZeigeReferenz: {0}", Types.ZeigeReferenz());

            Console.WriteLine("ZeigeReferenzVergleich: {0}", Types.ZeigeReferenzVergleich());

            Console.WriteLine("ZeigeStringVergleich: {0}", Types.ZeigeStringVergleich());

            Console.WriteLine("\n\n--- Klassen ---");

            // _type_ _identifier_ = _wert_;
            PersonOhneCtor personOhneCtor = new PersonOhneCtor();

            // obwohl kein Ctor in der Klasse definiert, ist er trotzdem verwendbar
            personOhneCtor.Nachname = "Mustermann";
            Console.WriteLine("personOhneCtor.GetType(): {0}", personOhneCtor.GetType());

            // Hier ist nur die Prop 'Nachname' nutzbar
            // Aber darf man auch andere Members der Klasse mindestens sehen?
            // Antwort: nur die public-Members, auch die vererbten
            Console.WriteLine("\nMembers");
            foreach (var item in personOhneCtor.GetType().GetMembers())
            {
                Console.WriteLine(item);
            }

            /*
             * System.String get_Nachname()
             * Void set_Nachname(System.String)
             * System.Type GetType()
             * System.String ToString()
             * Boolean Equals(System.Object)
             * Int32 GetHashCode()
             * Void .ctor()
             * System.String Nachname
             */
            // D_M08_Classes.PersonOhneCtor.GetType()

            Console.WriteLine("\nFields");
            foreach (var item in personOhneCtor.GetType().GetFields())
            {
                Console.WriteLine(item);
            }
            Console.WriteLine("keine Fields");
            // kommt nichts raus
            // hat jede Property ein entsprechendes Field??? #todo


            // ======================================
            // Konstruktoren
            // PersonMitCtor personMitCtor = new PersonMitCtor(); // der leere automatische Konstruktor ist nicht mehr verfügbar
            PersonMitCtor personMitCtor = new PersonMitCtor("Musternname"); // der leere automatische Konstruktor ist nicht mehr verfügbar

            Console.WriteLine("personMitCtor.Nachname: {0}", personMitCtor.Nachname);

            // ======================================
            // mehrere Konstruktoren
            Console.WriteLine("\n\nKonstruktoren");
            PersonMitCtor personMitCtor1 = new PersonMitCtor();
            PersonMitCtor personMitCtor2 = new PersonMitCtor(personMitCtor);

            Console.WriteLine("personMitCtor2.Nachname: {0}", personMitCtor2.Nachname);
            foreach (var item in personMitCtor2.GetType().GetProperties()) // nur public sind sichtbar
            {
                Console.WriteLine("personMitCtor2.Prop: {0}", item);
            }


            // ======================================
            // Klasse mit Feldern ohne Properties
            Console.WriteLine("\n\nKlassen mit Feldern");
            PersonMitFeldOhneProp personMitFeldOhneProp = new PersonMitFeldOhneProp();

            personMitFeldOhneProp.nachname = "NN";
            Console.WriteLine("personMitFeldOhneProp.nachname: {0}", personMitFeldOhneProp.nachname); // NN
            Console.WriteLine("\nFields");
            foreach (var item in personMitFeldOhneProp.GetType().GetFields())                         // nur public
            {
                Console.WriteLine(item);
            }

            PersonMitFeldOhneProp personMitFeldOhneProp1 = new PersonMitFeldOhneProp("nn");

            Console.WriteLine("personMitFeldOhneProp1.nachname: {0}", personMitFeldOhneProp1.nachname); // nn

            // Austesten SetVorname
            personMitFeldOhneProp1.SetVorname("vn");
            // Console.WriteLine("personMitFeldOhneProp1.vorname: {0}", personMitFeldOhneProp1.vorname);
            // geht nicht, weil private und kein öffentlicher Getter
            Console.WriteLine("personMitFeldOhneProp1.GetVorname(): {0}", personMitFeldOhneProp1.GetVorname());


            Console.ReadKey();
        }
        static void Main(string[] args)
        {
            Console.WriteLine("=== Klassenbibliothek verwenden ===");
            Console.WriteLine("--- Datentypen ---");
            Console.WriteLine("Types.ZeigeCharDefault('d'): {0}", Types.ZeigeCharDefault('d'));
            Console.WriteLine("ZeigeReferenz: {0}", Types.ZeigeReferenz());
            Console.WriteLine("ZeigeReferenzVergleich: {0}", Types.ZeigeReferenzVergleich());
            Console.WriteLine("ZeigeReferenzVergleich: {0}", Types.ZeigeStringVergleich());

            Console.WriteLine("\n\n--- Klassen ---");
            //_type_ _identifier_ = _wert_;
            PersonOhneCtor personOhneCtor = new PersonOhneCtor();

            // obwohl kein Ctor in der Klasse definiert, ist er trotzdem verwendbar
            personOhneCtor.Nachname = "Mustermann";
            Console.WriteLine("personOhneCtor.GetType(): {0}", personOhneCtor.GetType());
            Console.WriteLine("personOhneCtor.GetType(): {0}", personOhneCtor.GetType().Assembly);
            //Console.WriteLine("personOhneCtor.GetType(): {0}", personOhneCtor.GetType().GetMembers());
            //Console.WriteLine("personOhneCtor.GetType(): {0}", Demo_Classes.PersonOhneCtor.GetType); // geht nicht

            // Hier ist nur die Prop 'Nachname' nutzbar
            // Aber darf man auch andere Member der klasse mindestens sehen?
            Console.WriteLine("Members:");
            foreach (var item in personOhneCtor.GetType().GetMembers())
            {
                Console.WriteLine(item);
            }

            Console.WriteLine("\nFields"); //leer, hat jede Property ein entsprechendes Files?
            foreach (var item in personOhneCtor.GetType().GetFields())
            {
                Console.WriteLine(item);
            }
            Console.WriteLine("keine Fields");

            // ==========================
            #region Konstruktoren
            // Konstruktoren
            Console.WriteLine("\n\n--- Konstruktoren ---");

            //PersonMitCtor personMitCtor = new PersonMitCtor(); //der leere automatische Konstuktor ist nicht mehr verfügbar
            PersonMitCtor personMitCtor = new PersonMitCtor("Mustername");
            Console.WriteLine("personMitCtor.Nachname: {0}", personMitCtor.Nachname);

            // ==========================
            // mehrere Konstruktoren
            PersonMitCtor personMitCtor1 = new PersonMitCtor();
            PersonMitCtor personMitCtor2 = new PersonMitCtor(personMitCtor);
            Console.WriteLine("personMitCtor2.Nachname: {0}", personMitCtor2.Nachname);
            foreach (var item in personMitCtor2.GetType().GetProperties()) //nur public sind sichtbar
            {
                Console.WriteLine("personMitCtor2.GetType().GetProperties(): {0}", item);
            }

            #endregion Konstruktoren
            // ==========================
            #region Fields
            //Klassen mit Feldern ohne Properties
            Console.WriteLine("\n\n --- Klassen mit Feldern ---");
            PersonMitFeldOhneProp personMitFeldOhneProp = new PersonMitFeldOhneProp();
            personMitFeldOhneProp.nachname = "NN";
            Console.WriteLine("personMitFeldOhneProp.nachname: {0}", personMitFeldOhneProp.nachname); // NN
            Console.Write("personMitFeldOhneProp.GetType().GetFields(): ");
            foreach (var item in personMitFeldOhneProp.GetType().GetFields())                         // nur public
            {
                Console.WriteLine(item);
            }

            PersonMitFeldOhneProp personMitFeldOhneProp1 = new PersonMitFeldOhneProp("MM");
            Console.WriteLine("personMitFeldOhneProp1.nachname: {0}", personMitFeldOhneProp1.nachname); // MM

            // Austesten SetVorname
            personMitFeldOhneProp1.SetVorname("vn");
            // Console.WriteLine("personMitFeldOhneProp1.vorname: {0}", personMitFeldOhneProp1.vorname); // geht nicht weil private (verändern durch methode (Setter) schon) und kein öffentlicher Getter
            personMitFeldOhneProp1.GetVorname();
            Console.WriteLine("personMitFeldOhneProp1.GetVorname(): {0}", personMitFeldOhneProp1.GetVorname());



            #endregion



            Console.ReadKey();
        }