Gdzie zgubiło się imie?

0

Witam, mamy taki kod:

    public class Osoba
    {
        public string Imie { get; set; }

        public Osoba()
        {

        }
        protected Osoba(string imie)
        {
            this.Imie = imie;
        }
        public void create(string imie)
            => new Osoba(imie);
    }

    class Program
    {
        static void Main(string[] args)
        {
            Osoba a = new Osoba();
            a.create("andrzej");
            Console.WriteLine(a.Imie);
            Console.ReadLine();
        }
    }

Problem jest taki, że na samym końcu normalnie wchodzi i ustawia this.Imie = Imie; które zawiera "andrzej", lecz nie potrafi go wyświetlić.

Sprawdziłem breakpointami i kolejność wygląda tak:

  1. Osoba a = new Osoba();
  2. public Osoba()
  3. a.create("andrzej");
  4. public void create(string imie) => new Osoba(imie);
  5. protected Osoba(string imie)
  6. this.Imie = imie; (w imie nadal znajduje się "andrzej")
  7. Console.WriteLine(a.Imie); /// a.Imie = null;
1

Z tego co widzę, tworzysz najpierw pierwszą instancję klasy Osoba, wywołujesz create, w którzym tworzysz drugą instancję klasy Osoba z imieniem, a później wyświetlasz imię pierwszej instancji, którą utworzyłeś bez imienia.

2
 Osoba a = new Osoba();

uzywa konstruktora, który nie ustawia imienia:

  public Osoba()
        {
 
        }

poźniej uzywasz funkcji ktora tworzy i zwraca nową Osobę z imieniem

a.create("andrzej");

ale nigdzie nie zapisujesz tej osoby wiec nie masz do niej dostepu

0

Dzięki

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