Metoda zwracająca obiekt

0

Hej,
Chcę napisać metodę, która przyjmuje jako argument obiekt. Metoda ma przypisać wartości pól x i y przekazanego obiektu, ale zwracać ma obiekt zawierający stare wartości. Niestety gdzieś jest błąd w logice. Prośba o pomoc i z góry dzięki!

Oczekiwany przeze mnie wynik programu to:
x = 0, y = 0
x = 100, y = 200

Aktualny wynik:
x = 100, y = 200
x = 333, y = 444

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Text;
using System.IO;

namespace Training
{
    public class Point
    {
        int x;
        int y;

        public static void Main()
        {
            Point point1 = new Point();
            Point point2 = new Point();
            Point pointNew = new Point();

            point1.x = 100; point1.y = 200;            
            point2.x = 333; point2.y = 444;

            pointNew.ObjectXY(point1);
            Console.WriteLine("x = " + pointNew.x + ", y = " + pointNew.y);
            pointNew.ObjectXY(point2);
            Console.WriteLine("x = " + pointNew.x + ", y = " + pointNew.y);

            Console.ReadLine();
        }

        Point ObjectXY(Point point)
        {
            Point old_point = new Point();
            old_point.x = x;
            old_point.y = y;

            x = point.x;
            y = point.y;

            return old_point;
        }
    }
}
0

Zwracasz obiekt ale nic z nim nie robisz, poza tym nie zbyt rozumiem co chcesz osiągnąć.

Metoda ma przypisać wartości pól x i y przekazanego obiektu, ale zwracać ma obiekt zawierający stare wartości

To już tak działa, przekazujesz Punkt { 100, 200 } i te wartości zostają przypisane obiektu z którego wywołujesz tą metodę.

0

Ok spróbuje lepiej wytłumaczyć o co mi chodzi. Wcześniej robiłem metodę, która analogicznie do tej powyżej - ma zmieniać wartość x, ale wyświetlać starą wartość x. Wyglądała tak:


int OldX(int newX)
{
      int oldX = x;
      x = newX
      return oldX;
}

Metoda ta przypisywała starą wartość x do oldX, a nową wprowadzoną jako argument wartość nadpisywała x, ale zwracała starą wartość x. Czyli w klasie (w kodzie w oryginalnym poście) brała x i y, których default'owa wartość to 0 i ustalała oldX == 0. To samo chcę zrobić z obiektem, aby wprowadzany w argumencie obiekt nadpisywał x i y, ale zwracał stare wartości x i y.

1

Musialem 3 razy czytac byc zrozumiec ;)

nigdzie nie odbierasz obiektu z pointNew.ObjectXY(point1) np:
var p1 = pointNew.ObjectXY(point1);
var p2 = pointNew.ObjectXY(point2);
I wtedy p1 i p2 beda mialy wartrosci jakie chcesz.

Ale to podejscie jest... zle ;) Zwracac stara wartosc a modyfikowac parametr.
Mega nie intuicyjne.
Znaczenie lepiej zwracac nowa wartosc. A stara masz pod "stara" nazwazmiennej.
Ew modyfikowac (nazwac odpowiednio funkcje aby nie wprwadzala w blad !) a wczesniej sobie np kopie struktury robic.
P

0

Ooo dziękuję Ci bardzo! Działa tak jak chciałem!

Musialem 3 razy czytac byc zrozumiec ;)

Haha, jestem w tym nowy i domyślam się, że jeszcze nie umiem dobrze sformułować myśli, żeby przekazać o co mi chodzi.

Ale to podejscie jest... zle ;) Zwracac stara wartosc a modyfikowac parametr.
Mega nie intuicyjne.

To nie jest mój pomysł :P Uczę się z książką "C# Praktyczny kurs" - Marcin Lis. To zadanie jest z tej książki.

Dobrze, że działa. Teraz muszę pomyśleć dlaczego teraz działa, a wcześniej nie. Myślałem, że skoro tworzę specjalnie nowy, pusty obiekt pointNew to używając z nim pointNew.ObjectXY(point1) przypiszę mu wartości obiektu point1, a dokładniej za pomocą mojej metody, która zwraca old_point - stare wartości obiektu. Gdzieś jest błąd w moim rozumowaniu.
Anyway dzięki. Temat pewnie do zamknięcia :)

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