Gdzie zgubiło się imie?

Gdzie zgubiło się imie?
WeiXiao
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 5227
0

Witam, mamy taki kod:

Kopiuj
    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;
Haskell
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 4700
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.

HA
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 115
2
Kopiuj
 Osoba a = new Osoba();

uzywa konstruktora, który nie ustawia imienia:

Kopiuj
  public Osoba()
        {
 
        }

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

Kopiuj
a.create("andrzej");

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

WeiXiao
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 5227
0

Dzięki

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.