@lesha-proger
Люблю программировать. Изучаю C#/.NET/Unity3D/.

Использование одной переменной несколькими объектами. Как это происходит?

Привет всем!

using System;

namespace ConsoleApp1
{
   class AppObject
    {
        static int Main()
        {
            People humanoid_1 = new People("Name1");
            People humanoid_2 = new People("Name2");
            humanoid_1.peopleMetod();
            humanoid_2.peopleMetod();

            return 0;
        }
    }
    class People
    {
        string humanoid_name;

        public People(string name)
        {
            humanoid_name = name;
         }
        
        public void peopleMetod()
        {
            Console.WriteLine(humanoid_name);
        }

    }
}


При создание каждого экземпляра вызывается параметризированный конструктор, в котором исполняются все операторы, т.е. в данном случае происходит инициализация переменных, объявленных в классе.
Не понимаю, как в одну переменную записывается 2 разных значения. Думал , что оно переписывается но потом понял, что абсурд. При вызове метода, с ссылкой на один из объектов, выводится значение переменной данного объекта... И как метод обрабатывает данную переменную?
Спасибо!
  • Вопрос задан
  • 302 просмотра
Решения вопроса 2
tomnolane
@tomnolane
профессиональный разработчик
Не понимаю, как в одну переменную записывается 2 разных значения

People humanoid_1 = new People("Name1"); // humanoid_1 -> переменная раз
            People humanoid_2 = new People("Name2"); // humanoid_2  -> переменная дваз

тобишь уже две разные переменные типа People.
Все типы значений являются производными от типа System.ValueType и размещают свое значение в стеке.
тобишь вы создали две переменны ссылочного типа People. А ссылочные типы хранятся в куче. А при создании объекта ссылочного типа People humanoid_1 = new People("Name1"); в стеке помещается ссылка на адрес в куче.
Главный тобишь: у вас две кучи)
Ответ написан
@S0HardCore
Если вызывать метод из конкретного экземпляра, то из действия будут происходить относительно его контекста.

Для большего понимания привожу аналогию без ООП:
string people1 = "Name1";
string people2 = "Name2";
Console.WriteLine(people1);
Console.WriteLine(people2);
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы