У меня есть один class с именем «человек» и 2 objects (obj1 , obj2). и я написал ниже код

class human
{
    public static int x;
    public readonly int id;

    public human()
    {
        x++;
        id = x;
    }

    public void show()
    {
        Console.WriteLine("id = " + id);
    }
}


class Program
{
    static void Main(string[] args)
    {
        human obj1 = new human();
        human obj2 = new human();

        obj2 = obj1;
        Console.ReadKey();
    }
}

Я знаю, когда пишу этот код - >> human obj2 = obj1;

obj2 ссылка на obj1 в heap

Но в моем коде с этим - >> human obj2 = new human();

И сделайте это - >> obj2 = obj1;

Что obj2 обновит значения в его object значениями obj1 ??

Или obj2 будет ссылаться на obj1

Благодарность :)

c#
1
Mohamed Saleh 19 Авг 2019 в 15:06

2 ответа

Лучший ответ

Поскольку это class, то obj1 и obj2 будут ссылаться на один и тот же объект в памяти (поскольку они являются ссылочными типами). human объект с идентификатором 1

2
David Pilkington 19 Авг 2019 в 12:10

C # имеет типы значений и ссылочные типы. Тип значения напрямую хранит данные, тогда как ссылочный тип содержит ссылку на данные. Класс является ссылочным типом.

Где у вас есть:

human obj1 = new human();
human obj2 = new human();

Вы создаете две новые переменные, содержащие ссылки на разные новые экземпляры human.

Когда вы это сделаете:

obj2 = obj1;

Вы говорите: «Возьмите ссылку, содержащуюся в obj1, и присвойте ее obj2». Это означает, что obj1 и obj2 теперь оба ссылаются на один и тот же экземпляр , на который изначально ссылалась obj1.

Если у вас есть, например, какое-то открытое свойство с именем Name, и вы задаете:

obj1.Name = "Bob"

И затем вы обратились к obj2.Name, вы обнаружите, что получаете значение «Bob», потому что оба obj1 и obj2 ссылаются на один и тот же экземпляр.

В вашем примере вы заметите, что obj1 и obj2 имеют одинаковые Id.

1
Owen Pauling 19 Авг 2019 в 12:18