static void Main(string[] args) { //1 - nej de är inkapslade PersonHandler ph = new PersonHandler(); Person anderz = ph.CreatePerson(37, "Anderz", "Lindberg", 180, 65); ph.PrintPerson(anderz); //3.2.8: Bird //3.2.9: Animal List <Animal> Animals = new List <Animal>(); Animals.Add(new Swan(10, "anderz1", 3.1415, "pirates lang", "att angöra en brygga")); Animals.Add(new Dog(100, "anderz2", 0.001, "inföding")); Animals.Add(new Worm(1, "kalle", 2, false)); /* * 3.3.11: Listan skapas tom, varpå objekt adderas mha varje klass konstruktorer (och de anropade bas-konstruktorerna i dem) varefter följande loop stegar igenom listan med en iterator * (och skriver ut statsen för varje instans): */ foreach (Animal animal_iterator in Animals) { Console.WriteLine(animal_iterator.Stats()); } foreach (Animal animal_iterator in Animals) { if (animal_iterator is Dog) { Console.WriteLine(animal_iterator.Stats()); } //animal_iterator.SayObama(); 3.3.15: därför att typen är Animal.. En Animal är INTE en Dog men en Dog är en Animal. } foreach (Animal animal_iterator in Animals) { if (animal_iterator is Dog) { Dog d = (Dog)animal_iterator; Console.WriteLine(d.Stats() + d.SayObama()); } } List <UserError> UserErrors = new List <UserError>(); UserErrors.Add(new TextInputError()); UserErrors.Add(new NumericInputError()); UserErrors.Add(new ShitBehindKeyboardError()); UserErrors.Add(new WeatherError()); UserErrors.Add(new MomError()); foreach (UserError u in UserErrors) { Console.WriteLine(u.UEMessage()); } /* * 3.4.11, svar: För att kunna skapa ett gemensamt gränssnitt för flera klasser som ärver av samma basklass. Det innebär * att man kan skriva olika implementationer för olika subklasser av samma metoder - som därmed kan användas * på samma sätt, oavsett implementation. * * 3.4.12, svar: Se föreg. svar .. samt undvika att skriva dubbelt eftersom enbart enskilda implementationsdetaljer behöver * ..ja, implementeras.. och i den anropande koden behöver man inte fundera så mycket på hur den ska användas * just eftersom gränssnittet implicerar vissa beteenden. Exempel en panel på en bandspelare har alltid en play- * knapp och man behöver inte veta så mycket mer om det underliggande annat än att det är på play man ska trycka. * Instanser av subklasserna kan också hanteras som vore de instanser av basklassen - med flera fördelar; exempelvis * blir det möjligt att skapa samlingar av olika typer genom att sätta datatypen till superklassen. * * 3.4.13, svar: C# tillåter arv från EN basklass enbart, vilket går att komma runt med interface. Interface tillåter inga definitioner * eller privata medlemmar. * * * * */ }
static void Main(string[] args) { /*PERSON*/ //Person person = new Person(); List <Person> persons = new List <Person>(); PersonHandler personHandler = new PersonHandler(); Person person1 = personHandler.CreatePerson(20, "Anna", "A", 170, 60); Person person2 = personHandler.CreatePerson(25, "John", "J", 180, 80); persons.Add(person1); persons.Add(person2); Console.WriteLine("*************************PERSONS INFO*************************"); WritePersonsInfoToConsole(persons); personHandler.SetAge(person1, 70); personHandler.SetAge(person2, 75); Console.WriteLine("\nAfter calling SetAge Method:"); WritePersonsInfoToConsole(persons); /*ANIMAL*/ List <Animal> animals = new List <Animal>(); Horse horse = new Horse(true, "Horsii", 100, 8); Dog dog = new Dog(true, "Doggii", 20, 5); Hedgehog hedgehog = new Hedgehog(120, "Hedgehogii", 2, 1.5); Bird bird = new Bird(40, "Birdii", 3, 4); Pelican pelican = new Pelican(true, 60, "Pelicanii", 6, 2.5); Flamingo flamingo = new Flamingo("White", 65, "Flamingoii", 5, 6); Swan swan = new Swan("Yellow", 50, "Swanii", 2.5, 1); animals.Add(horse); animals.Add(dog); animals.Add(hedgehog); animals.Add(bird); animals.Add(pelican); animals.Add(flamingo); animals.Add(swan); Console.WriteLine("\n*************************ANIMALS NAMES*************************"); WriteAnimalsNameToConsole(animals); Console.WriteLine("\n\n*************************ANIMALS INFO*************************"); WriteAnimalsInfoToConsole(animals); /*Dog*/ List <Dog> dogs = new List <Dog>(); // below commented code does not work because of not appropriate type // dogs.Add(horse); Console.WriteLine("\n*************************DOG SPEAKS*************************"); WriteDogsSpeakToConsole(animals); Console.WriteLine("\n*************************USER ERROR*************************"); var userErrors = new List <UserError>(); NumericInputError numericInputError = new NumericInputError(); TextInputError textInputError = new TextInputError(); userErrors.Add(numericInputError); userErrors.Add(textInputError); foreach (UserError userError in userErrors) { Console.WriteLine(userError.UEMessage()); } }