Присваивание ссылок - C#
Формулировка задачи:
Всем привет!
Начал изучать C# по книжке C# in a nutshell, возникло несколько вопросов относительно ссылочных типов.
Есть класс Панда
Сначала делаем так:
Вывод такой:
2
2
3
3
4
4
Как собственно и написано в учебнике, p2 присвоилась ссылка, которая была в p1 и ведут они себя совершенно одинаково, то есть при изменении p1 изменяется p2.
Вопрос №1: почему при изменении p2 изменяется p1? То есть, p2 это копия p1, но почему при измении копии изменяется и оригинал?
Теперь, если p2=p1 заменить на p1=p2
то вывод будет
2
0
3
3
4
4
Здесь почему-то сначала оригиналу не присвоилось значении копии, но после изменения копии изменился и оригинал. Почему?
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); }
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); }
Решение задачи: «Присваивание ссылок»
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(); } } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д