• 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
251 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,760 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 221 wizyt
0 głosów
2 odpowiedzi 153 wizyt
pytanie zadane 22 maja 2016 w PHP przez Kacper Duda Obywatel (1,970 p.)
0 głosów
3 odpowiedzi 384 wizyt
pytanie zadane 11 października 2019 w C# przez JakSky Stary wyjadacz (14,770 p.)

92,453 zapytań

141,262 odpowiedzi

319,088 komentarzy

61,854 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.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...