public void TestMethod1() { var FredVollgas = new Autobahn.Auto("Ferrari", "F4", 100); var RudiNormalo = new Autobahn.Auto("VW", "Passat", 103); var Susi = new Autobahn.Auto("Citroen", "Ente", 105); // Eventhandler registrieren FredVollgas.Hupen += new Autobahn.Auto.DGHupen(RudiNormalo.HöreHupe); FredVollgas.Hupen += new Autobahn.Auto.DGHupen(Susi.HöreHupe); // Events sind im Sinne des Aufrufes privat, bezüglich des Zugriffs öffentlich //FredVollgas.Hupen(99); // Ohne Schlüsselwort event wäre folgendes möglich // FredVollgas.Hupen(99); for (int i = 0; i < 1000; i++) { FredVollgas.fahre(100, 1); RudiNormalo.fahre(30, 1); Susi.fahre(20, 1); // Situation bewerten FredVollgas.SituationBewerten(RudiNormalo, Susi); } }
public void TestMethod1() { Auto HugosSchrottkiste = new Auto(); HugosSchrottkiste.EntfernungVonStuttgartInKm = 200; //HugosSchrottkiste.Dispose(); // Um die explizit implementierte Dispose- Methode aus IDisposable aufzurufen, muß zuvor ein Schnittstellenzeiger gezogen werden IDisposable ptrIDsp = HugosSchrottkiste; ptrIDsp.Dispose(); ((IDisposable)HugosSchrottkiste).Dispose(); // Simmulation von 'Scope' in C++ using (var Silberpfeil = new Auto("Mercedes", "Rennauto")) { Debug.WriteLine(Silberpfeil.Marke); } // Hier wird automatisch Dispose aufgerufen // Im unsing- Block können nur Objekte instanziiert werden, deren Klasse // IDisposable implementieren //using (var Zentrum = new Point(1, 2)) //{ //} try { var Silberpfeil2 = new Auto("Mercedes", "Rennauto2"); //using(var heute = DateTime.Now) using (var fredVollgas = new Auto("Ferrari", "Testarossa")) using (var KunoTunichtGut = new Auto("Alpha", "Romeo")) { Debug.WriteLine(Silberpfeil2.Marke); // Plötzlich passiert ein Fehler throw new Exception(); Debug.WriteLine("Nach dem Fehler"); } // Überschreiten der using- Blockgrenze fürht automat. zum Aufruf von // Dispose ((IDisposable)Silberpfeil2).Dispose(); } catch (Exception) { Debug.WriteLine("Fehler aus using- Block wurde behandelt"); } // Die bessere Lösung wäre wohl nur explizite Implementierung zuzulassen, wobei der Zugriff auf die Schnittstellenelemente // von c# unterstützt wird wie folgt // HugosSchrottkiste.IDisposable.Dispose(); for (int k = 0; k < 100; k++) { Auto FredVollgas = new Auto("Ferrari", "Nr " + k, 0, 80); do { double[] v = { 20, 30, 10, 40, 50, 60, 30, 10 }; double[] t = { 40, 20, 30, 5, 3, 7, 10, 15 }; // Simulation: Vorankommen auf dem hat umkämpften linken Fahrstreifen for (int i = 0; i < v.Length; i++) { FredVollgas.fahre(v[i], t[i]); //Debug.WriteLine("Aktuelle Position von Fred Vollgas: {0:N3}", FredVollgas.EntfernungVonStuttgartInKm); } } while (FredVollgas.EntfernungVonStuttgartInKm < 50.0); } for (int k = 0; k < 100; k++) { Auto FredVollgas = new Auto("VW", "Nr " + k, 0, 80); using (Auto FredVollgas2 = new Auto("VW", "Nr " + k, 0, 80)) { do { double[] v = { 20, 30, 10, 40, 50, 60, 30, 10 }; double[] t = { 40, 20, 30, 5, 3, 7, 10, 15 }; if (k == 50) goto Sprungmarke; // Simulation: Vorankommen auf dem hat umkämpften linken Fahrstreifen for (int i = 0; i < v.Length; i++) { FredVollgas2.fahre(v[i], t[i]); //Debug.WriteLine("Aktuelle Position von Fred Vollgas: {0:N3}", FredVollgas2.EntfernungVonStuttgartInKm); } } while (FredVollgas2.EntfernungVonStuttgartInKm < 50.0); } // Ende using- Block //Einen "Schnittstellenzeiger ziehen", um auf die explizit definierte Dispose- Methode zuzugreifen //IDisposable dsp = FredVollgas; //dsp.Dispose(); } Sprungmarke:; }
public void TestMethod1() { StoppUhr meineStoppuhr = new StoppUhr(); // Zugriff auf den inneren Zustand durch schreiben in eine Eigenschaft meineStoppuhr.ZeitInMsEigenschaft = 1000; // Lesen des inneren Zustandes durch lesen einer eigenschaft double gestoppteZeit = meineStoppuhr.ZeitInMsEigenschaft; // Events austesten meineStoppuhr.ZeitLimitInMs = 1000; // Eventhandler registrieren meineStoppuhr.ZeitlimitUeberschrittenEvent += MeinEventhandler; // wg. dem Schlüsselwort event kann der Delegate nicht m,ehr über die Objektinstanz direkt aufgeufen werden //meineStoppuhr.ZeitlimitUeberschrittenEvent(1, 2); meineStoppuhr.Start(); System.Threading.Thread.Sleep(2000); meineStoppuhr.Stopp(); // Eventhandler wieder abkoppeln meineStoppuhr.ZeitlimitUeberschrittenEvent -= MeinEventhandler; // anderen ankoppeln meineStoppuhr.ZeitlimitUeberschrittenEvent += MeinAndererEventhandler; meineStoppuhr.Start(); System.Threading.Thread.Sleep(2000); meineStoppuhr.Stopp(); // Beide Eventhandler ankoppeln meineStoppuhr.ZeitlimitUeberschrittenEvent += MeinEventhandler; meineStoppuhr.Start(); System.Threading.Thread.Sleep(2000); meineStoppuhr.Stopp(); Wasserhahn kleinerHahn = new Wasserhahn(25.4), Absperrhahn = new Wasserhahn(50.8); kleinerHahn.öffnen(50.0); Absperrhahn.öffnen(100.0); kleinerHahn.öffnen(20); Absperrhahn.öffnen(100); Console.WriteLine("Öffnung kleiner Hahn in %: {0:N1}", kleinerHahn.ÖffnungInPromille / 10); kleinerHahn.ÖffnungInPromille = 333; Console.WriteLine("Öffnung kleiner Hahn in %: {0:N1}", kleinerHahn.ÖffnungInPromille / 10); // Zugriff auf statische Methoden Console.WriteLine("Durchfluss: {0:N3}", Wasserhahn.DurchflussInCm3ProSekunde(kleinerHahn, 10)); // Arbeiten mit der Klasse Auto // Objekte konstuieren oder synonym Instanzen instanziieren Auto FredVollgas = new Auto("Ferrari", "Testarossa"); // nur lesbare Eigenschaft kann nicht gesetzt werden //FredVollgas.VolleFahrzeugbezeichnung = "Porsche/Carrera"; Debug.WriteLine(FredVollgas.VolleFahrzeugbezeichnung); // Eine Eigenschaft mit intelligenten Gettern und Settern // Compiler wandelt Zuweisung um in FredVollgas.EntfernungVonStuttgartInKm.set(100); FredVollgas.EntfernungVonStuttgartInKm = 100; // Anlegen von SusiSchleicher mit dem 2. Konstruktor (startet bei 50km) Auto SusiSchleicher = new Auto("VW", "Käfer", 50, 10); Auto AntonNormalo = new Auto("VW", "Golf", 10, 120); // Neu ab .NET 3.5 Objektinitialisierer: Dynamisch einen Konstruktor der Wahl schaffen Auto RudiHandwerker = new Auto("Audi", "A6", 25); Auto[] fahrsteifen = new Auto[] { new Auto("Fiat", "Stilo", 99), new Auto("Dacia", "Logan", 200), new Auto("VW", "Golf", 150) }; Console.WriteLine("Der Wagen von Fred Vollgas iste ein " + FredVollgas.Marke + " Modell " + FredVollgas.Modell); // Marke ist eine nur lesbare Eigenschaft //SusiSchleicher.Marke = "Ferrari"; // Fahren und Position über den Rückgabewert der Methode bestimmen double pos = FredVollgas.fahre(50, 5); Console.WriteLine("Aktuelle Position von Fred Vollgas: {0:N3}", FredVollgas.EntfernungVonStuttgartInKm); double[] v = { 20, 30, 10, 40, 50, 60, 30, 10 }; double[] t = { 40, 20, 30, 5, 3, 7, 10, 15 }; // Simulation: Vorankommen auf dem hat umkämpften linken Fahrstreifen for (int i = 0; i < v.Length; i++) { FredVollgas.fahre(v[i], t[i]); Console.WriteLine("Aktuelle Position von Fred Vollgas: {0:N3}", FredVollgas.EntfernungVonStuttgartInKm); } }