Присваивание ссылок - C#

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

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

Всем привет! Начал изучать C# по книжке C# in a nutshell, возникло несколько вопросов относительно ссылочных типов. Есть класс Панда
public class Panda
{
    public int x;
    public Panda () {}
    public int setX (int a)
    {
        x=a;
        return x;
    }
}
Сначала делаем так:
static void Main()
{
    Panda p1 = new Panda ();
    p1.setX(2);
    Console.WriteLine(p1.x);
    Panda p2 = new Panda ();
    p2=p1;
    Console.WriteLine(p2.x);
    p1.setX(3);
    Console.WriteLine(p1.x);
    Console.WriteLine(p2.x);
    p2.setX(4);
    Console.WriteLine(p1.x);
    Console.WriteLine(p2.x);    
}
Вывод такой: 2 2 3 3 4 4 Как собственно и написано в учебнике, p2 присвоилась ссылка, которая была в p1 и ведут они себя совершенно одинаково, то есть при изменении p1 изменяется p2. Вопрос №1: почему при изменении p2 изменяется p1? То есть, p2 это копия p1, но почему при измении копии изменяется и оригинал? Теперь, если p2=p1 заменить на p1=p2
static void Main()
{
    Panda p1 = new Panda ();
    p1.setX(2);
    Console.WriteLine(p1.x);
    Panda p2 = new Panda ();
    p1=p2;
    Console.WriteLine(p2.x);
    p1.setX(3);
    Console.WriteLine(p1.x);
    Console.WriteLine(p2.x);
    p2.setX(4);
    Console.WriteLine(p1.x);
    Console.WriteLine(p2.x);
    
}
то вывод будет 2 0 3 3 4 4 Здесь почему-то сначала оригиналу не присвоилось значении копии, но после изменения копии изменился и оригинал. Почему?

Решение задачи: «Присваивание ссылок»

textual
Листинг программы
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace ConsoleApplication12 {
    class Program {
        static void Main(string[] args) {
            string s1 = "one";
            string s2 = "one";
            Console.WriteLine(s1 == s2);
            Console.ReadLine();
        }
    }
}

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


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

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

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