From 775e6b5234a585f26ef2add71a5f5b7082ac013a Mon Sep 17 00:00:00 2001
From: Uwe Wienkop <uwe.wienkop@th-nuernberg.de>
Date: Mon, 28 Jun 2021 13:07:37 +0200
Subject: [PATCH] 2021-06-28 Mo

---
 07-1 Intro Interfaces/Classes.cs          |   3 +-
 07-1 Intro Interfaces/Program.cs          |   4 +
 07-2 Intro Exceptions/Program.cs          |  70 ++++++-----
 08-2 Generics Intro/Program.cs            |   7 +-
 09-1 KeyValueList/KeyValueList.cs         |  14 +--
 09-Ubg GenericStack-Di/GenericStack.cs    |   2 +-
 "0\303\2378-3 GenericList/GenericList.cs" |   3 +-
 "0\303\2378-3 GenericList/Program.cs"     |   6 +-
 13-2 VererbungWdhlg/Program.cs            | 135 ++++++++++++++--------
 9 files changed, 154 insertions(+), 90 deletions(-)

diff --git a/07-1 Intro Interfaces/Classes.cs b/07-1 Intro Interfaces/Classes.cs
index b3a1984..1fbc29a 100644
--- a/07-1 Intro Interfaces/Classes.cs	
+++ b/07-1 Intro Interfaces/Classes.cs	
@@ -6,8 +6,7 @@ namespace _07_1_Intro_Interfaces
 {
     interface IBesteuerbar
     {
-        /* public abstract */
-        double Steuern();
+        /* public abstract */ double Steuern();
     }
     // Interface ist eine abstrakte Klasse
     // alle Methoden sind public und abstract
diff --git a/07-1 Intro Interfaces/Program.cs b/07-1 Intro Interfaces/Program.cs
index 2c63964..28400c9 100644
--- a/07-1 Intro Interfaces/Program.cs	
+++ b/07-1 Intro Interfaces/Program.cs	
@@ -22,7 +22,11 @@ namespace _07_1_Intro_Interfaces
             verkObj[2] = new Immobilien();
 
             foreach (var item in verkObj)
+            {
+                Console.WriteLine(item);
                 item.Verkaufen();
+                Console.WriteLine($"Steuern: {(item as Pkw).Steuern()}");
+            }
 
             IBesteuerbar[] bestObj = new IBesteuerbar[2];
             //int ind = 0;
diff --git a/07-2 Intro Exceptions/Program.cs b/07-2 Intro Exceptions/Program.cs
index 0f2fc74..7df86bd 100644
--- a/07-2 Intro Exceptions/Program.cs	
+++ b/07-2 Intro Exceptions/Program.cs	
@@ -10,6 +10,7 @@ namespace _07_2_Intro_Exceptions
             FehlerCode = fehlercode;
         }
     }
+
     class Program
     {
         static void funktion1(int x)
@@ -34,39 +35,46 @@ namespace _07_2_Intro_Exceptions
         {
             try
             {
-                Console.WriteLine("Vor Funktion1");
-                funktion1(1);
-                funktion2(2);
-                funktion3(0);
-                Console.WriteLine("Nach Funktion1");
-            }
-            catch (ArgumentOutOfRangeException e)  // catch fängt FehlerTYPEN
-            {
-                Console.WriteLine("Es ist eine ArgumentOutOfRangeException aufgetreten");
-                Console.WriteLine($"Fehler: {e.Message}");
-            }
-            catch (ArithmeticException)  // catch fängt FehlerTYPEN
-            {
-                Console.WriteLine("Es ist ein Arithmetikfehler aufgetreten");
-            }
-            catch (MeinFehler mf)  // catch fängt FehlerTYPEN
-            {
-                Console.WriteLine($"{mf.Message} | {mf.FehlerCode}");
-                throw new ArgumentException();
-                throw;
-             }
-            catch (Exception)   // Zuerst die spezifischen Fehler fangen, dann die allgemeineren!!!
-            {
-                Console.WriteLine("Es ist ein allgemeiner Fehler aufgetreten");
+                try
+                {
+                    Console.WriteLine("Vor Funktion1");
+                    funktion1(1);
+                    funktion2(2);
+                    funktion3(0);
+                    Console.WriteLine("Nach Funktion1");
+                }
+                catch (ArgumentOutOfRangeException e)  // catch fängt FehlerTYPEN
+                {
+                    Console.WriteLine("Es ist eine ArgumentOutOfRangeException aufgetreten");
+                    Console.WriteLine($"Fehler: {e.Message}");
+                }
+                catch (ArithmeticException)  // catch fängt FehlerTYPEN
+                {
+                    Console.WriteLine("Es ist ein Arithmetikfehler aufgetreten");
+                }
+                catch (MeinFehler mf)  // catch fängt FehlerTYPEN
+                {
+                    Console.WriteLine($"{mf.Message} | {mf.FehlerCode}");
+                    throw new ArgumentException();
+                    throw;  // Weiterwerfen des Fehlerobjekts
+                }
+                catch (Exception)   // Zuerst die spezifischen Fehler fangen, dann die allgemeineren!!!
+                {
+                    Console.WriteLine("Es ist ein allgemeiner Fehler aufgetreten");
+                }
+                finally
+                {
+                    Console.WriteLine("Wird immer ausgeführt");
+                    // Zum Beispiel Dateien schließen, Ressourcen freigeben
+                    // Bei ...
+                    // Fehlerfreier Ausführung des try-Blocks
+                    // Fehlerhafter Ausführung des try-Blocks mit und ohne catch 
+                    //     (auch mit weiterem throw [mit und ohne Parameter] )
+                }
             }
-            finally
+            catch (ArgumentException)
             {
-                Console.WriteLine("Wird immer ausgeführt");
-                // Zum Beispiel Dateien schließen, Ressourcen freigeben
-                // Bei ...
-                // Fehlerfreier Ausführung des try-Blocks
-                // Fehlerhafter Ausführung des try-Blocks mit und ohne catch 
-                //     (auch mit weiterem throw [mit und ohne Parameter] )
+                Console.WriteLine("Hab Dich!");
             }
         }
     }
diff --git a/08-2 Generics Intro/Program.cs b/08-2 Generics Intro/Program.cs
index 5c15309..2a8c4a9 100644
--- a/08-2 Generics Intro/Program.cs	
+++ b/08-2 Generics Intro/Program.cs	
@@ -3,7 +3,7 @@ using System.Diagnostics.CodeAnalysis;
 
 namespace _08_2_Generics_Intro
 {
-    class Person : IComparable<Person>
+    class Person  : IComparable<Person>
     {
         string name, vorname;
         public Person(string Name, string Vorname) { name = Name;vorname = Vorname; }
@@ -74,6 +74,11 @@ namespace _08_2_Generics_Intro
             Console.WriteLine($"Minimum von 7.5 und 7.3: {Min(7.5, 7)}");
             Console.WriteLine($"Minimum von Berta und Anton: {Min("Berta", "Anton")}");
             Console.WriteLine($"Minimum von zwei Person-Objekten: {Min(new Person("Meier","Anton"), new Person ("Meier","Berta"))}");
+            
+            bool gleich = new Person("Meier", "Anton").Equals(new Person("Meier", "Berta"));
+            // Equals ist bereits in der Klasse Object definiert, damit in allen Klassen verfügbar,
+            //   enthält aber nur die "Basis-Implementierung" eines Referenzvergleichs.
+            // MUSS für ein richtiges Equals in der jeweiligen Klasse neu definiert werden.
         }
     }
 }
diff --git a/09-1 KeyValueList/KeyValueList.cs b/09-1 KeyValueList/KeyValueList.cs
index 88f24a9..39bdecf 100644
--- a/09-1 KeyValueList/KeyValueList.cs	
+++ b/09-1 KeyValueList/KeyValueList.cs	
@@ -5,9 +5,9 @@ using System.Text;
 
 namespace _09_1_KeyValueList
 {
-    class KeyValueList<K,V>:IComparable<KeyValueList<K,V>>   where K:IComparable<K>
+    class KeyValueList<K, V> : IComparable<KeyValueList<K, V>>  where K : IComparable<K>
     {
-        private class KVItem  
+        private class KVItem
         {
             public K key;
             public V val;
@@ -31,15 +31,15 @@ namespace _09_1_KeyValueList
                 last = last.next;
             }
         }
-        public IEnumerator<KeyValuePaar<K,V>> GetEnumerator()
+        public IEnumerator<KeyValuePaar<K, V>> GetEnumerator()
         {
-            for (KVItem item = first; item!=null;item=item.next)
+            for (KVItem item = first; item != null; item = item.next)
                 yield return new KeyValuePaar<K, V>(item.key, item.val);
         }
         private KVItem ItemSearch(K searchKey)
         {
             for (KVItem item = first; item != null; item = item.next)
-                if (item.key.CompareTo(searchKey)==0)
+                if (item.key.CompareTo(searchKey) == 0)
                     return item;
             return null;
         }
@@ -61,9 +61,9 @@ namespace _09_1_KeyValueList
                     AddEnd(key, value);
             }
         }
-        public KeyValueList<K,V> Copy()
+        public KeyValueList<K, V> Copy()
         {
-            KeyValueList<K,V> res = new KeyValueList<K, V>();
+            KeyValueList<K, V> res = new KeyValueList<K, V>();
             // ...
             return res;
         }
diff --git a/09-Ubg GenericStack-Di/GenericStack.cs b/09-Ubg GenericStack-Di/GenericStack.cs
index 1cd211f..e9458aa 100644
--- a/09-Ubg GenericStack-Di/GenericStack.cs	
+++ b/09-Ubg GenericStack-Di/GenericStack.cs	
@@ -64,7 +64,7 @@ namespace _09_Ubg_GenericStack_Di
         public bool Contains(T searchData)
         {
             for (StackItem item = first; item != null; item = item.next)
-            {
+            { // Equals ~ Test auf Gleichheit
                 if (item.data.Equals(searchData))
                     return true;
             }
diff --git "a/0\303\2378-3 GenericList/GenericList.cs" "b/0\303\2378-3 GenericList/GenericList.cs"
index 29e0b53..e0347ba 100644
--- "a/0\303\2378-3 GenericList/GenericList.cs"	
+++ "b/0\303\2378-3 GenericList/GenericList.cs"	
@@ -1,5 +1,6 @@
 using System;
 using System.Collections.Generic;
+using System.Collections;
 using System.Text;
 namespace _08_3_GenericList
 {
@@ -25,7 +26,7 @@ namespace _08_3_GenericList
         LItem first = null, last = null;
         public int Count { get; private set; }
         public Liste() { Count = 0; }
-        public int CompareTo(Liste<T> other) => Count - other.Count;
+        public int CompareTo(Liste<T> other) => this.Count - other.Count;
 
         public void AddEnd(T Data)
         {
diff --git "a/0\303\2378-3 GenericList/Program.cs" "b/0\303\2378-3 GenericList/Program.cs"
index 050993e..365c56b 100644
--- "a/0\303\2378-3 GenericList/Program.cs"	
+++ "b/0\303\2378-3 GenericList/Program.cs"	
@@ -32,6 +32,10 @@ namespace _08_3_GenericList
             sl.AddSorted("Claudia");
             sl.AddSorted("Anton");
             sl.Print();
+            foreach (var item in sl)
+            {
+                Console.WriteLine();
+            }
 
             //Liste<object> ol = new Liste<object>();
             //ol.AddEnd(1);
@@ -57,7 +61,7 @@ namespace _08_3_GenericList
             kl.AddSorted(new LKW("FÜ-MN 543", 20000, 5000));
             kl.Print();
 
-            // foreach (var item in kl)
+            //foreach (var item in kl)
             foreach (var item in kl.Reverse())
             {
                 Console.WriteLine(item);
diff --git a/13-2 VererbungWdhlg/Program.cs b/13-2 VererbungWdhlg/Program.cs
index 173ab78..7cb1745 100644
--- a/13-2 VererbungWdhlg/Program.cs	
+++ b/13-2 VererbungWdhlg/Program.cs	
@@ -2,67 +2,110 @@
 
 namespace _13_2_VererbungWdhlg
 {
-    interface IBetankbar {
+    class Program
+    {
+        static void Main(string[] args)
+        {
+            /*[1]*/
+            IBetankbar[] fuhrpark = { new DieselFZ(), new BenzinFZ(), new ElektrischesFZ() };
+            foreach (/*2*/IBetankbar fz in fuhrpark)
+                macheFahrbereit(/*3:nix*/fz);
+        }
+        public static void macheFahrbereit(IBetankbar/*4*/ fz)
+        {
+            fz.tanke();  // für 4 auf tanke() schauen!
+        }
+    }
+
+    interface IBetankbar /*[5]*/
+    {
         void tanke();
     }
-    interface IBefuellbar : IBetankbar
+    interface IBefuellbar /*[6]*/ : IBetankbar
     {
         double Fuellstand { get; set; }
         void befuelle();
     }
-    interface ILadbar : IBetankbar
+    interface ILadbar /*[7]*/ : IBetankbar
     {
         double Ladestand { get; set; }
         void lade();
     }
+    abstract class FossilerAntrieb : IBefuellbar
+    {
+        /*[8]*/
+        protected double fuellstand;
+        public double Fuellstand  /*[9]*/
+        {
+            get { return fuellstand; }
+            set
+            {
+                if (value >= 0.0 && value <= 1.0)
+                    fuellstand = value;
+            }
+        }
+        /*[10]*/
+        public abstract void befuelle();
+        /*[11]*/
+        public void tanke()
+        {
+            if (fuellstand < 0.5)
+                befuelle();
+            else
+                Console.WriteLine("Noch fahrbereit");
+        }
+    }
 
-
-
-abstract class FossilerAntrieb : IBefuellbar
-{
-    [8] double fuellstand;
-    public double[9] {  
-    get { return fuellstand; }
-set
-{ if (value >= 0.0 && value <= 1.0) fuellstand = value; }  
-  }
-  [10] void befuelle();
-[11] () {
-    if (fuellstand < 0.5) befuelle();
-    else Console.WriteLine("Noch fahrbereit");
-}
-}
-
-abstract class ElektrischerAntrieb : ILadbar
-{
-    [14] double ladestand;
-    public double[15] {  
-    get { return ladestand; }
-set
-{
-    if (value >= 0.0 && value <= 1.0) ladestand = value;
-}
-[16] void lade();
-[17] () {
-    if (ladestand < 0.5) lade();
-    else Console.WriteLine("Noch fahrbereit");
-}
-}
-class ElektrischesFZ : ElektrischerAntrieb
-{
-    [18]
-    void lade()
+    class DieselFZ : FossilerAntrieb
     {
-        Console.WriteLine("Ladestecker entnehmen, warten, Ladestecker in Halterung.");
-        ladestand = 1.0;
+        /*12*/
+        public override void befuelle()
+        {
+            Console.WriteLine("Dieselhandschuhe anziehen, Zapfpistole entnehmen, tanken, Zapfpistole in Halterung.");
+            fuellstand = 1.0;
+        }
+    }
+    class BenzinFZ : FossilerAntrieb
+    {
+        /*13*/
+        public override void befuelle()
+        {
+            Console.WriteLine("Zapfpistole entnehmen, tanken, Zapfpistole in Halterung.");
+            fuellstand = 1.0;
+        }
     }
-}
 
-class Program
+    abstract class ElektrischerAntrieb : ILadbar
     {
-        static void Main(string[] args)
+        /*[14]*/
+        protected double ladestand;
+        public double Ladestand/*[15]*/
+        {
+            get { return ladestand; }
+            set
+            {
+                if (value >= 0.0 && value <= 1.0) ladestand = value;
+            }
+        }
+
+        /*[16]*/
+        public abstract void lade();
+        /*[17]*/
+        public void tanke()
+        {
+            if (ladestand < 0.5)
+                lade();
+            else
+                Console.WriteLine("Noch fahrbereit");
+        }
+    }
+    class ElektrischesFZ : ElektrischerAntrieb
+    {
+        /*[18]*/
+        public override void lade()
         {
-            Console.WriteLine("Hello World!");
+            Console.WriteLine("Ladestecker entnehmen, warten, Ladestecker in Halterung.");
+            ladestand = 1.0;
         }
     }
-}
+}
\ No newline at end of file
-- 
GitLab