• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

C# błąd w konstruktorze

VPS Starter Arubacloud
0 głosów
309 wizyt
pytanie zadane 23 marca 2016 w C# przez Vento Pasjonat (17,120 p.)

Cześć mam klasę człowiek z konstruktorem:

 

class czlowiek
    {
        private string imie;
        private string nazwisko;
        private int wiek;

        public czlowiek(string imie, string nazwisko, int wiek)
        {
            this.imie = imie;
            this.nazwisko = nazwisko;
            this.wiek = wiek;
        }
    }

 

Gdy tworze nowy obiekt z konstruktorem, to pokazuje błąd na zmiennych: 

admin.imie, admin.nazwisko, admin.wiek

 

 static void Main(string[] args)
        {
            czlowiek admin = new czlowiek("Jan", "Kowalski", 34);
            Console.WriteLine("Cześć {0} {1}! Za 10 lat będziesz miał {2} lat!", admin.imie, admin.nazwisko, admin.wiek + 10);
            Console.ReadLine();
        }

 

6 odpowiedzi

0 głosów
odpowiedź 23 marca 2016 przez achilles147 Dyskutant (9,580 p.)
wybrane 23 marca 2016 przez Vento
 
Najlepsza
Ponieważ twoje składowe imie,nazwisko,wiek są prywatne. Wszystko co jest prywatne w klasie jest widoczne tylko na poziomie klasy. Ty natomiast odwołujesz się do tych składowych na poziomie obiektu "admin". Wystarczy, że zmienisz kwalifikatory dostępu z private na public.

PS: dodałbym jeszcze kwalifikator public przed słowem kluczowym class. Bez tego twoja klasa jest domyślnie prywatna.
+3 głosów
odpowiedź 23 marca 2016 przez Mar Cin Dyskutant (8,900 p.)
Albo poprostu porób gettery i settery :)
+1 głos
odpowiedź 23 marca 2016 przez Surykat Stary wyjadacz (14,780 p.)
Bo zmienne są prywatne- uczyń je publicznymi.

Tak btw: nazwy klas z dużej litery. Poczytaj też, czym są właściwości- nie powinno się robić publicznych pól (zmiennych).
+1 głos
odpowiedź 23 marca 2016 przez Magicone Nałogowiec (45,100 p.)
Co prawda nie piszę w c#, ale czy na pewno możesz mieć dostęp do pól prywatnych poza klasą?
+1 głos
odpowiedź 23 marca 2016 przez niezalogowany

Ustawianie pól jako publicznych (bez konkretnego powodu) nie jest dobrą praktyką. Stwórz settery/gettery, albo najlepiej od razu to zautomatyzuj stosując właściwości (ang. properties) - na msdn masz wszystko ładnie opisane.

komentarz 23 marca 2016 przez Boshi VIP (100,240 p.)
właściwości/atrybuty/properties to jedno i to samo.
komentarz 23 marca 2016 przez niezalogowany
Tak, wiem. Przy czym pisząc settery/gettery miałem na myśli ręczne definiowanie tych funkcji ("JAVOWY" zapis).
0 głosów
odpowiedź 23 marca 2016 przez Vento Pasjonat (17,120 p.)
Rozumiem.

Dziękuję wszystkim za pomoc.

Podobne pytania

0 głosów
3 odpowiedzi 248 wizyt
0 głosów
2 odpowiedzi 181 wizyt
pytanie zadane 22 maja 2016 w PHP przez Kacper Duda Obywatel (1,970 p.)
0 głosów
3 odpowiedzi 427 wizyt
pytanie zadane 11 października 2019 w C# przez JakSky Stary wyjadacz (14,770 p.)

93,018 zapytań

141,982 odpowiedzi

321,283 komentarzy

62,365 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Wprowadzenie do ITsec, tom 2

Można już zamawiać tom 2 książki "Wprowadzenie do bezpieczeństwa IT" - będzie to około 650 stron wiedzy o ITsec (17 rozdziałów, 14 autorów, kolorowy druk).

Planowana premiera: 30.09.2024, zaś planowana wysyłka nastąpi w drugim tygodniu października 2024.

Warto preorderować, tym bardziej, iż mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy dodatkowe 15% zniżki! Dziękujemy zaprzyjaźnionej ekipie Sekuraka za kod dla naszej Społeczności!

...