Problem z wypisaniem listy

0

Witam, mam pewien problem.
Mam takie 2 metody:

public void dodajBibliotekarza(Bibliotekarz bibliotekarz)
        {

           bibliotekarze.Add(bibliotekarz);
        }

        public void wypiszBibliotekarzy()
        {
            foreach (Bibliotekarz bibliotekarz in bibliotekarze)
            {
                Console.WriteLine($"imie: {bibliotekarz.Imie} nazwisko: {bibliotekarz.Nazwisko} data zatrudnienia: {bibliotekarz.DataZatrudnienia}" +
                        $"wynagrodzenie: {bibliotekarz.Wynagrodzenie}");
            }
        }

Pierwsza ma pobierać dane z klasy Bibliotekarz w której są 3 stringi i 1 double i zapisać je do klasy bibliotekarze.
Druga ma wypisywać elemynty z tej listy.
Jednak gdy próbuję to sprawdzić takim kodem:

            Bibliotekarz k = new Bibliotekarz("A","B","C", 2);
            Biblioteka b = new Biblioteka();
            b.dodajBibliotekarza(k);
            b.wypiszBibliotekarzy();

Nie wyświetla przypisanych wartości, a jedynie puste pola.
Może mi ktoś wytłumaczyć o co chodzi?
Z góry dziękuję.

1

Nie napisałeś co chciałeś sprawdzić.
Kod (poza polskimi nazwami oraz camelCase zamiast PascalCase) wygląda prawidłowo.
Cokolwiek nie działa prawidłowo sprawdzisz to wykonując kod pod debugerem linijka po linijce.

0

@ŁF: Rzeczywiście, zakręciłem się, już poprawione.

0

Pokaż konstruktor klasy Bibliotekarz

0

@szydlak

        public Bibliotekarz()
        {
            dataZatrudnienia = "puste";
            wynagrodzenie = 0;
        }
        public Bibliotekarz(string imie_, string nazwisko_, string dataZatrudnienia_, double wynagrodzenie_) : base(imie_, nazwisko_)
        {
            imie_ = imie;
            nazwisko_ = nazwisko;
            dataZatrudnienia_ = dataZatrudnienia;
            wynagrodzenie_ = wynagrodzenie;
        }
0

@kuku4321

mozesz pokazac caly kod? w sensie klase Biblotekarz i klase z ktorej dziedziczy (bo widze ze uzywasz base)

0

@fasadin: jasne
Bibliotekarz:

    public class Bibliotekarz : Osoba
    {
        private string dataZatrudnienia;
        private double wynagrodzenie;

        public Bibliotekarz()
        {
            dataZatrudnienia = "puste";
            wynagrodzenie = 0;
        }
        public Bibliotekarz(string imie_, string nazwisko_, string dataZatrudnienia_, double wynagrodzenie_) : base(imie_, nazwisko_)
        {
            imie_ = imie;
            nazwisko_ = nazwisko;
            dataZatrudnienia_ = dataZatrudnienia;
            wynagrodzenie_ = wynagrodzenie;
        }
        public string DataZatrudnienia
        {
            get { return dataZatrudnienia; }
            set { dataZatrudnienia = value; }
        }

        public double Wynagrodzenie
        {
            get { return wynagrodzenie; }
            set { wynagrodzenie = value; }
        }
    }
}

Osoba:

    public class Osoba
    {
        protected string imie;
        protected string nazwisko;

        public Osoba()
        {
            imie = "puste";
            nazwisko = "puste";
        }

        public Osoba(string imie_, string nazwisko_)
        {
            imie_ = imie;
            nazwisko_ = nazwisko;
        }

        public string Imie
        {
            get { return imie; }
            set { imie = value; }
        }
        public string Nazwisko
        {
            get { return imie; }
            set { imie = value; }
        }

    }
}  
3
    public Osoba(string imie_, string nazwisko_)
        {
            imie_ = imie;
            nazwisko_ = nazwisko;
        }

przypisujesz tutaj argumenty funkcji do zmiennych klasy, Uzyj operatora this to wtedy sie raczej nie pomylisz ;) w sensie

To robi Twoj kod

    public Osoba(string imie_, string nazwisko_)
        {
            imie_ = this.imie;
            nazwisko_ = this.nazwisko;
        }

a chcesz

    public Osoba(string imie_, string nazwisko_)
        {
           this.imie = imie_;
           this.nazwisko =  nazwisko_ ;
        }

mozesz pokazac klase (cala) gdzie masz zdefiniowane dodajBibliotekarza oraz wypiszBibliotekarzy()?

2

BTW nie stosuj jakichś podkreślników z d**y, stosuj się do standardów języka, w którym programujesz, tym bardziej, że nie uchroniło Cię to w żaden sposób przed złym przypisaniem. Użyj auto properties, ukryj setter w celu lepszej ochrony właściwości. Używaj angielskich nazw, żeby nie tworzyć potworków typu GetImięBibliotekarza

        public string Name { get; }
        public string Surname { get; }

        public Librarian(string name, string surname)
        {
            Name = name ?? throw new ArgumentNullException(nameof(name)); // w takim przypadku this jest niepotrzebne, bo konwencje nazewnicze argumentów i właściwości różnią się
            Surname = surname ?? throw new ArgumentNullException(nameof(surname));
        }
0

@ŁF: Nie mogę nie stosować podkreślników z d**y tylko standardów, ponieważ to jest zadanie na studia i tak jest w treści.

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