Odwołanie się do drugiej klasy C#

Szukałam i nie znalazłam

Jak odwołać się z konstruktora klasy Osoba do konstruktora klasy Adres?

Wyskakuje mi błąd w klasie Osoba, z którym nie wiem jak sobie poradzić.
Proszę o pomoc i wytłumaczenie już 2 tydzień się z tym męczę.

Nie mogę zastosować get, sat i nie mogę zmieniać kodu w klasie Program. W klasie Osoba i Adres wszystkie nazwy muszą pozostać takie jakie są. Kod trzeba przerobić tak aby efekt końcowy był jak na obrazku
obraz

Klasa Osoba

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

namespace Kadry
{
    public class Osoba
    {
        private int numerEwidencyjny;
        private string nazwisko;
        private string imie;
        Adres adres;

        public Osoba(int numerEwidencyjny, string nazwisko, string imie, Adres adres)
        {
            this.numerEwidencyjny = numerEwidencyjny;
            this.nazwisko = nazwisko;
            this.imie = imie;
            this.adres = adres;
        }

        public Osoba(int numerEwidencyjny, string imie, int numerDomu) :
        this(numerEwidencyjny, "Kowalski", imie, "02-222", "Warszawa", "Aleje Jerozolimskie", numerDomu, 0) { }

        public Osoba(ref Osoba osoba)
        {
            numerEwidencyjny = osoba.numerEwidencyjny;
            nazwisko = osoba.nazwisko;
            imie = osoba.imie;
            adres = osoba.adres;
        }

        public string ZwrocKod()
        {
            return adres.kod;
        }

        public string ZwrocMiejscowosc()
        {
            return adres.miejscowosc;
        }

        public string ZwrocNazweUlicy()
        {
            return adres.nazwaUlicy;
        }
       
        public int ZwrocNumerDomu()
        {
            return adres.numerDomu;
        }

        public int ZwrocNumerMieszkania()
        {
            return adres.numerMieszkania;
        }

        public string ZwrocInformacjeOsobowe()
        {
            return string.Format("\n Pan(i) {0} {1} o numerze ewidencyjnym: {2} zamieszkały(a): {3} {4} {5}",
            nazwisko, imie, numerEwidencyjny, ZwrocKod(), ZwrocMiejscowosc(),
          ZwrocNazweUlicy() + " " + ZwrocNumerDomu() + " m" + ZwrocNumerMieszkania());
        }

        public void ZmienDaneOsobowe()
        {
            Console.Write("Podaj imię: "); imie = Console.ReadLine();
            Console.Write("Podaj nazwisko: "); nazwisko = Console.ReadLine();
            do
            {
                Console.Write("Podaj numer ewidencyjny: ");
            }
            while (!int.TryParse(Console.ReadLine(), out numerEwidencyjny));
        }

        public void ZmienAdres()
        {
            Console.Write("Podaj kod: ");
            adres.kod = Console.ReadLine();

            Console.Write("Podaj nazwę miejscowści: ");
            adres.miejscowosc = Console.ReadLine();

            Console.Write("Podaj nazwę ulicy ");
            adres.nazwaUlicy = Console.ReadLine();



            do
            {
                Console.Write("Podaj numer domu: ");

            }

            while (!int.TryParse(Console.ReadLine(), out adres.numerDomu));

            Console.Write("Czy jest numer mieszkania <t/n>: ");
            char c = Console.ReadKey().KeyChar;
            if (c == 't')
            {
                Console.WriteLine();

                do
                {
                    Console.Write("Podaj numer meszkania: ");
                }

                while (!int.TryParse(Console.ReadLine(), out adres.numerMieszkania));

            }

            else
            {
                adres.numerMieszkania = 0;
            }

        }

        public Osoba Klonuj()
        {
            return (Osoba)this.MemberwiseClone();
        }

    }


}

Klasa Adres

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

namespace Kadry
{
    public class Adres
    {
        public string kod;
        public string miejscowosc;
        public string nazwaUlicy;
        public int numerDomu;
        public int numerMieszkania;

        public Adres(string kod, string miejscowosc, string nazwaUlicy, int numerDomu, int numerMieszkania)
        {
            this.kod = kod;
            this.miejscowosc = miejscowosc;
            this.nazwaUlicy = nazwaUlicy;
            this.numerDomu = numerDomu;
            this.numerMieszkania = numerMieszkania;
        }

        public Adres(ref Adres adres)
        {
            kod = adres.kod;
            miejscowosc = adres.miejscowosc;
            nazwaUlicy = adres.nazwaUlicy;
            numerDomu = adres.numerDomu;
            numerMieszkania = adres.numerMieszkania;
        }

    }


}

Klasa Program

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

namespace Kadry
{
    public class Program
    {
        static void Main(string[] args)
        {
            Osoba os1 = new Osoba(5, "Ola", 43);
            Console.WriteLine(" Oryginał {0}", os1.ZwrocInformacjeOsobowe());
            Console.WriteLine("\n***Zmieniamy klon:***\n");
            Osoba klon1 = os1.Klonuj();
            Console.WriteLine("\n Klon: {0}", klon1.ZwrocInformacjeOsobowe());
            klon1.ZmienDaneOsobowe();
            klon1.ZmienAdres();
            Console.WriteLine("\n Klon: {0}", klon1.ZwrocInformacjeOsobowe());

            Osoba os3 = new Osoba(ref os1);
            Console.WriteLine(" Oryginał {0}", os3.ZwrocInformacjeOsobowe());
            Console.WriteLine("\n***Zmieniamy klon:***\n");
            Console.WriteLine("\n Klon: {0}", klon1.ZwrocInformacjeOsobowe());
            klon1.ZmienDaneOsobowe();
            klon1.ZmienAdres();
            Console.WriteLine("\n Klon: {0}", klon1.ZwrocInformacjeOsobowe());
            Console.ReadKey();
        }

    }


}

Co to za błąd?


linia 25
Muszę chyba odwołać się z klasy Osoba do klasy Adres, ale nie wiem jak.
Błąd w tym kodzie

public Osoba(int numerEwidencyjny, string imie, int numerDomu) :
        this(numerEwidencyjny, "Kowalski", imie, "02-222", "Warszawa", "Aleje Jerozolimskie", numerDomu, 0) { }

Moim zdaniem powinno być This.text = typ danych.Format …
Poczytaj tutaj, może Ci pomoże Rozdział 5. Programowanie obiektowe.:: 4programmers.net

Nie, bo muszę odwołać się do z klasy Osoba do konstruktora z klasy Adres.
Muszę odwołać się z klasa Osoba

 public Osoba(int numerEwidencyjny, string imie, int numerDomu) :
        this(numerEwidencyjny, "Kowalski", imie, "02-222", "Warszawa", "Aleje Jerozolimskie", numerDomu, 0) { }

do klasa klasa Adres

public Adres(string kod, string miejscowosc, string nazwaUlicy, int numerDomu, int numerMieszkania)
        {
            this.kod = kod;
            this.miejscowosc = miejscowosc;
            this.nazwaUlicy = nazwaUlicy;
            this.numerDomu = numerDomu;
            this.numerMieszkania = numerMieszkania;
        }

W klasie Osoba mam

public Osoba(int numerEwidencyjny, string imie) :
        this(numerEwidencyjny, "Kowalski", imie) { }

Pozostałe dane mam w klasie Adres .

Robisz to jak w konstruktorze wyżej tylko zamiast kopiować do klasy adres przesyłany argumentem to po prostu tworzysz w konstruktorze obiekt klasy Adres z domyślnym adresem jaki chcesz aby był.

Mam do zrobienia takie zadanie
Twoim zadaniem jest stworzenie i przetestowanie klasy Osoba. O każdej osobie
powinieneś posiadać następujące informacje:
 imię i nazwisko
 numerEwidencyjny
 adresZamieszkania. Klasa Adres zawiera następujące dane:
 nazwaUlicy, miejscowosc
 numerDomu
 numerMieszkania

Zakładając, że najczęściej spotykanym nazwiskiem jest Kowalski, firma znajduje się w Warszawie i ma
mieszkania pracownicze przy ulicy Aleje Jerozolimskie, stwórz odpowiednie konstruktory.

  • Z klasy Osoba wyróżnij klasę Adres
  • dla utworzonej klasy adres zdefiniuj swoje konstruktory.
  • zastosuj kilka różnych konstruktorów

Nie używaj get i set.
Nie zmieniaj klasy Program.

Robisz to jak w konstruktorze wyżej
W którym konstruktorze?

to po prostu tworzysz w konstruktorze obiekt klasy Adres
Obiekt klasy adres tworze w klasie Osoba?

W tym:

        public Osoba(int numerEwidencyjny, string nazwisko, string imie, Adres adres)
        {
            this.numerEwidencyjny = numerEwidencyjny;
            this.nazwisko = nazwisko;
            this.imie = imie;
            this.adres = adres;
        }

Tak. Podobnie jak to robisz w klasie program z klasą osoba.

Jak skopiujesz ten konstruktor usuniesz parametr adres i zmienisz tę linijkę:

 this.adres = adres;

to masz zrobione zadanie

Pogubiłam się

public Osoba(int numerEwidencyjny, string imie, Adres adres, int numerDomu) :
        this(numerEwidencyjny, "Kowalski", imie, adres, "02-222", "Warszawa", "Aleje Jerozolimskie",  numerDomu, 0)
        { }

Drobna dygresja, Nowaków jest więcej niż kowalskich :slight_smile:

Tak sobie wykładowca zażyczył.

Nigdy nie miałam styczności z Java.

Możesz mi jeszcze raz wytłumaczyć bo nic z tego nie rozumiem?
Nie miałam jeszcze nic o kopiowaniu na wykładach. Wykładowca dał skrypt do przerobienia.

Gdzie tutaj jest kopiowanie?
Czy this.adres = adres; to jest kopiowanie?

Tak.

Na tym chyba polega nauka i studiowanie. Wiesz czego nie wiesz teraz możesz szukać jakiś kursów lub książek. :slight_smile:

Powiem tak ja chce pracować we frontend więc nie potrzebna mi java i c#. Zamiast uczyć się javascript to ja już zmarnowałam 2 tygodnie na zrobienie zadania na studia i jeszcze nie wiem jak zrobić.

Wyskakują mi błędy prosze o pomoc.

public Osoba(int numerEwidencyjny, string imie,  Adres adres, int numerDomu) :
        Osoba adres = new Osoba;
        this(numerEwidencyjny, "Kowalski", imie, "02-222", "Warszawa", "Aleje Jerozolimskie",  numerDomu, 0)
        { }

Nie ma różnicy czy chcesz robić fronetend czy backend. Podstawy programowania trzeba znać, a w jakim języku się ich uczysz nie ma znaczenia. W JS czy TS też masz klasy i dziedziczenie, ale moim zdaniem dużo bardziej skomplikowana jest tam składania jak chodzi o klasy i dziedziczenie, więc chyba lepiej jest się uczyć na czymś prostszym …

1 polubienie