Przypisanie obiektowi wartość innego obiektu

0

Witam, z góry mówię, że doświadczenie z C# to ja mam nikłe, pewnie problem który opisuję jest banalny, ale nie mogę znaleźć żadnego sposobu na jego rozwiązanie. Więc:

using System;
using System.Collections;

class liczby
{
	public int a,b;

	public liczby(int a, int b)
	{
		this.a = a;
		this.b = b;
	}
}

class st
{
	public ArrayList list = new ArrayList();
	
	public st(int a, int b)
	{
		list.Add(new liczby(a,b));
	}

}

class Program
{
	static void Main()
	{
		st a = new st(5,10), b = new st(2,4);
                b = a; ((liczby)b.list[0]).a -= 5;
                System.Console.WriteLine("a.list[0].a = " + ((liczby)a.list[0]).a);
                System.Console.WriteLine("b.list[0].a = " + ((liczby)b.list[0]).a);
		System.Console.ReadKey();
	}
}

Jak pewnie wiecie, obie wartości są sobie równe (wynoszą 0). Zachowanie operatora przypisania, można opisać tak jakby do obiektu "b" został przypisany adres obiektu "a", a nie jego wartość. Czy jest sposób, aby przypisać do "b" wartość "a"? Z góry dzięki za odpowiedź!

0

Możesz przeładować (przeciążyć) operator przypisania. Jak to się robi to na pewno szybko znajdziesz. Możesz też utworzyć konstruktor:

  public st(st source)
  {
      list = new ArrayList();
      foreach (liczby l in source.list)
      {
           list.add(new liczby(l.a,l.b));
      }
  }
st b = new st(a);

Będzie to głęboka kopia, czyli zarówno kopia listy jak i jej elementów.

No i zostaw ArrayList. Lepiej używać typów generycznych jak chociażby List<T>. Tutaj byłoby to List<liczby>.

0

Możesz przeładować (przeciążyć) operator przypisania.

To ciekawe. Powiesz o tym coś więcej?

@OP:
Stwórz sobie dodatkową metodę, np. o nazwie Copy(), zaznacz dokładnie w dokumentacji jakiego typu kopię ta metoda tworzy i jej używaj.

0
Rev napisał(a)

Możesz przeładować (przeciążyć) operator przypisania.

To ciekawe. Powiesz o tym coś więcej?

Eeee chyba się walnąłem i to ostro ;). W C++ można w C# najwyraźniej nie ;]

1 użytkowników online, w tym zalogowanych: 0, gości: 1