Esempio n. 1
0
 public void Eat(IHerbivore food)
 {
     Console.WriteLine(this.GetType().Name + " eats " + food.GetType().Name);
 }
Esempio n. 2
0
        private static void TestPolymorphism()
        {
            // Променлива от тип ICarnivore. Може да сочи към обект, който наследява интерфейс ICarnivore.
            // Чрез нея могат да бъдат достъпени методите описани в този интерфейс
            // както и методите описани в Object, защото всичко така или иначе наследява Object
            ICarnivore carnivore = CreateCarnivore();

            carnivore.EatMeat();
            carnivore.ToString();

            //Но чрез нея не могат да бъдат извикани методите на обект Fox, тък като тя (променливата) не е от тип Fox.
            //carnovore.StealTheCheese()


            //Променлива от тип AbstractAnimal. Може да сочи към обект, който наследява обект AbstractAnimal.
            //Чрез нея могат да бъдат достъпени методите описани в AbstractAnimal,
            //както и методите описани в Object, защото всичко така или иначе наследява Object
            //Но пак както преди не може да бъде използвана за извикване на методите на FOX
            AbstractAnimal anyAnimal = CreateAbstractAnimal();

            //Променлива от тип Object, може да сочи към всичко, защото всичко всъщност наследява Object, директно или не.
            //Но може да бъде използвана за извикване само на методи дефинирани в Object
            Object obj = CreateObject();

            obj.GetHashCode();

            // променлива от тип IHerbivore. Може да сочи към обект наследяващ IHerbivore - Elephant, Rabbit или Fox,
            // но не може да сме 100% сигурни към кое от тях без да сме проверили
            IHerbivore herbivore = CreateHerbivore();

            // може да проверим дали случайно не сочи към Rabbit
            if (herbivore is Rabbit)
            {
                // по случайност сочи към обект който всъщност е Rabbit
                Rabbit r;              // създаваме променлива от тип Заек - тя може да сочи само към обект от тип Заек.
                r = (Rabbit)herbivore; // тъй като вече сме проверили, че herbivore всъщност сочи към Заек е безопасно да кастнем към Заек.
                // тъй като r е от тип Заек може да извикваме методите на заек.
                r.DoZigZag();
            }
            else if (herbivore is Fox)
            {
                // съкратена версия на предното
                ((Fox)herbivore).StealTheCheese();
            }
            else if (herbivore is Elephant el)
            {
                // още по-съкратена версия на предното.
                el.DrinkFromTheNose();
            }

            // директното кастване е опасно: ((Fox)herbivore).StealTheCheese();
            // Използва се само ако преди това сме направили проверка дали наистина обекта е такъв, какъвто ние очакваме: if (herbivore is Fox)
            // В противен случай програмата ще гръмне ако не сме уцелили правилният тип

            //Втори вариант на кастване - ключова дума "as" :
            Fox fox = herbivore as Fox;

            if (fox == null)
            {
                // резултат 1: herbivore не е от тип лисица и няма как да бъде третиран като такава. Променливата Fox ще сочи към нищото.
                // При такъв вид кастване трябва винаги да се провери дали променливата не е null.
                Console.WriteLine("This herbivore is not a fox");
            }
            else
            {
                //резултат 2: успешно успяхме да кастнем към лисица, това означава, че обекта herbivore всъщност е лисица.
                // и сега чрез променливата fox може да викаме методи характерни само за лисица.
                fox.StealTheCheese();
            }


            //Всяка променлива от референтен тип А може:
            Fox        f        = new Fox();    //да сочи към обект от тип А
            IHerbivore herb     = new Rabbit(); //, обект, който наследява А
            Elephant   elephant = null;         //или към нищо (null)
        }
Esempio n. 3
0
 public void Eat(IHerbivore h)
 {
     Console.WriteLine(this.ToString() + " devours " + h.ToString());
 }
Esempio n. 4
0
 public void Eat(IHerbivore h)
 {
     // Eat Bison
     Console.WriteLine(GetType().Name + " eats " + h.GetType().Name);
 }
Esempio n. 5
0
 public void Eat(IHerbivore h)
 {
     // Eat Wildebeest
     Console.WriteLine(this.GetType().Name +
                       " eats " + h.GetType().Name);
 }
Esempio n. 6
0
        public Coordinates MoveAway(IField field, List <Coordinates> predatorsCoords, IHerbivore prey)
        {
            var         predatorAvg = GetAvgPredatorLocation(predatorsCoords);
            Coordinates newPos      = GetMoveAwayPos(predatorAvg, prey);

            if (field.Contents[newPos.CoordinateX, newPos.CoordinateY] != Settings.EmptyBlock)
            {
                newPos = _correctPlacement.CorrectFromStacking
                             (field, newPos.CoordinateX, newPos.CoordinateY, prey.CoordinateX, prey.CoordinateY);
            }

            field.Contents[prey.CoordinateX, prey.CoordinateY]     = Settings.EmptyBlock;
            field.Contents[newPos.CoordinateX, newPos.CoordinateY] = prey.Body;

            return(newPos);
        }
Esempio n. 7
0
 public void Eat(IHerbivore h)
 {
     // Eat Bison
     Console.WriteLine(this.GetType().Name +
         " eats " + h.GetType().Name);
 }
Esempio n. 8
0
 public void Eat(IHerbivore herbivore)
 {
     Console.WriteLine(this.GetType().Name + " eats " + herbivore.GetType().Name);
 }
Esempio n. 9
0
 public void Eat(IHerbivore herbivore)
 {
     Console.WriteLine($"{GetType().Name} eats {herbivore.GetType().Name} in America.");
 }
Esempio n. 10
0
        /// <summary>
        /// Contructor of Animalworld
        /// </summary>
        /// <param name="continent">Continent of the animal world that is created.</param>
        public AnimalWorld(Continent continent)
        {
            // Get fully qualified factory name
            string name = this.GetType().Namespace + "." +
                continent.ToString() + "Factory";

            // Dynamic factory creation
            IContinentFactory factory =
                (IContinentFactory)System.Activator.CreateInstance
                (Type.GetType(name));

            // Factory creates carnivores and herbivores
            _carnivore = factory.CreateCarnivore();
            _herbivore = factory.CreateHerbivore();
        }
Esempio n. 11
0
 public void Eat(IHerbivore herbivore)
 {
     Console.WriteLine("I am eating {0}", herbivore);
 }
Esempio n. 12
0
 public void Eat(IHerbivore herbivore)
 {
     Console.WriteLine($"{this.GetType().Name} eats {herbivore.GetType().Name}");
 }
Esempio n. 13
0
 public void LockTarget(IHerbivore nearestHerbivore)
 {
     Target = nearestHerbivore;
     nearestHerbivore.Runaway(this);
     Speed = (MaxSpeed + MinSpeed) / 2;
     TargetCaptured = true;
 }
Esempio n. 14
0
 public AnimalWorld(IContinentFactory factory)
 {
     carnivore = factory.CreateCarnivore();
     herbivore = factory.CreateHerbivore();
 }
Esempio n. 15
0
 public AnimalWorld(IContinentFactory continentFactory)
 {
     _herbivore = continentFactory.CreateHerbivore();
     _carnivore = continentFactory.CreateCarnivore();
 }
Esempio n. 16
0
 public string Eat(IHerbivore herbivore)
 {
     return(String.Format("{0} eats {1}", GetType().Name, herbivore.GetType().Name));
 }
Esempio n. 17
0
 public Jungle(IHabitatFactory factory)
 {
     herbivore = factory.CreateHerbivore();
     carnivore = factory.CreateCarnivore();
 }
Esempio n. 18
0
 public void Eat(IHerbivore herbivore)
 {
     Console.WriteLine("stalks and pounces on " + herbivore.GetType().Name);
 }
 string ICarnivore.Eats(IHerbivore herbivore)
 {
     //TODO: replace this code with MongoDB
     return $"{GetType().Name} eats {herbivore.GetType().Name}";
 }
 public void Eat(IHerbivore herbivore)
 {
     WriteLine($"{GetType().Name} eats {herbivore.GetType().Name}");
 }
Esempio n. 21
0
 public void Eat(IHerbivore herbivore)
 {
     Console.WriteLine("sneaks and bites and eats " + herbivore.GetType().Name);
 }