.NET 4.x Разное изменение значений полей при разных режимах отладки - C#

Узнай цену своей работы

Формулировка задачи:

Есть 2 класа:
using System;
 
namespace Zoo
{
    class Cat
    {
        private int heigth;
        private int age;

#region getters&setters
       
        public int getHeigth() 
        {
            return heigth;
        }
        public void setHeigth(int a)
        {
            if (a > 5)
            {
                heigth = a;
            }
        }
        public int getAge()
        {
            return age;
        }
        public void setAge(int a)
        {
            age = a;
        }
 
#endregion
 
        public void murr() 
        {
            Console.WriteLine("мурр...");
        }   
 
     }
}
и
using System;
 
namespace Zoo
{
    class Program
    {
        static void ZapCat(Cat g)
        {
            Random r = new Random();
            g.setAge(r.Next(100, 300));
            g.setHeigth(r.Next(0, 99));
        }     
 
        static void Main(string[] args)
        {
            Cat [] c = new Cat[2];
 
               c[0] = new Cat();
               ZapCat(c[0]);
               c[1] = new Cat();
               ZapCat(c[1]);

            Console.WriteLine("|{0, -10}|{1,-10:0}|{2,-10:0}|", "Назва", "Зрiст", "Вiк");
            Console.WriteLine("|{0, 10}|{1,10:0}|{2,10:0}|", c[0].GetType(), c[0].getHeigth(), c[0].getAge());
            Console.WriteLine("|{0, 10}|{1,10:0}|{2,10:0}|", c[1].GetType(), c[1].getHeigth(), c[1].getAge());
            Console.ReadLine();
        }
    }
}
Проблема заключается в следующем: При пошаговой проверке заполнения массива все работает правильно. Каждый объект имеет свои значения полей. Но при обычном запуске значение первого объекта дублируется на все остальные объекты в массиве. Почему?! Скриншоты (на первом пошаговая отладка, на втором запус с прерыванием):

Решение задачи: «.NET 4.x Разное изменение значений полей при разных режимах отладки»

textual
Листинг программы
Random r = new Random();
 
static void ZapCat(Cat g)
        {
            g.setAge(r.Next(100, 300));
            g.setHeigth(r.Next(0, 99));
        }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 4 из 5
Похожие ответы