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

Polimorfizm klas, błąd [C#]

0 głosów
87 wizyt
pytanie zadane 28 listopada 2018 w C# i .NET przez profesorek96 Maniak (53,180 p.)

Witam was.

Mam dwie klasy, klasę osoba i klasę student. Klasa osoba dziedziczy z klasy student.

 class Osoba
    {
        public string imie { get; set; }
        public string nazwisko { get; set; }
        public Osoba(string i,string n)
        {
            imie = i;
            nazwisko = n;
        }
    }

 

class Student:Osoba
    {
        public string nrIndexu { get; set; }
        public Student(string i,string n,string nr):base(i,n)
        {
            nrIndexu = nr;
        }
    }

Cały problem polega na tym że chciałbym stworzyć obiekt klasy Student przypisany do zmiennej typu Osoba. Czy jest to możliwe bez używania klasy abstrakcyjnej?

Kod maina:

class Program
    {
        static void Main(string[] args)
        {
            Osoba a = new Osoba("Jan", "Kowalski");
            Student b = new Osoba("Adam", "Nowak");
            Student c = new Student("Krzysztof", "Los","123");
            Console.ReadKey();
        }
    }

 

1 odpowiedź

0 głosów
odpowiedź 28 listopada 2018 przez adrian17 Ekspert (204,960 p.)
wybrane 29 listopada 2018 przez profesorek96
 
Najlepsza

Cały problem polega na tym że chciałbym stworzyć obiekt klasy Student przypisany do zmiennej typu Osoba

Tak, to po prostu działa.

Osoba d = new Student("Adam", "Nowak", "123");

 

komentarz 28 listopada 2018 przez profesorek96 Maniak (53,180 p.)
Ok tylko co taki zapis daje mi jak mam i tak tyle pól co w klasie Osoba ?
komentarz 28 listopada 2018 przez adrian17 Ekspert (204,960 p.)
Na przykład to, że możesz przechowywać Studentów w List<Osoba>. Albo przekazać do metody biorącej Osoba.

To jest podstawa polimorfizmu.
komentarz 28 listopada 2018 przez profesorek96 Maniak (53,180 p.)
No ale takie rozwiązanie powoduje że on nie widzi pól zdefiniowanych w klasie Student która dziewdziczy po klasie Osoba. Wiec co mi z tego jak mam nie pełne dane i nie przechoam całego obiektu Student tylko tyle ile pokrywa sie z klasą Osoba.
komentarz 28 listopada 2018 przez NowyUrzydgownig Gaduła (3,570 p.)
Wtedy jak chcesz sprawdzić, czy osoba jest studentem to używasz operatora 'is'. Następnie możesz to sobie rzutować słowem 'as'. Wtedy masz studenta i możesz odczytać jego nr indeksu.
komentarz 28 listopada 2018 przez adrian17 Ekspert (204,960 p.)

Wiec co mi z tego jak mam nie pełne dane i nie przechoam całego obiektu Student tylko tyle ile pokrywa sie z klasą Osoba.

Przechowujesz cały obiekt, tylko zmienna jest referencją na klasę bazową. Poczytaj o polimorfiźmie. Nie musisz tego używać, jeśli nie potrzebujesz.

 

komentarz 30 listopada 2018 przez profesorek96 Maniak (53,180 p.)
Dzięki za wytłumaczenie :)

Podobne pytania

0 głosów
1 odpowiedź 110 wizyt
pytanie zadane 18 czerwca w C# i .NET przez Ramzes Nowicjusz (140 p.)
0 głosów
0 odpowiedzi 35 wizyt
pytanie zadane 1 kwietnia 2017 w C# i .NET przez jankustosz1 Pasjonat (20,110 p.)
0 głosów
0 odpowiedzi 42 wizyt
Porady nie od parady
Publikując kody źródłowe korzystaj ze specjalnego bloczku koloryzującego składnię (przycisk z napisem code w edytorze). Nie zapomnij o ustawieniu odpowiedniego języka z rozwijanego menu oraz czytelnym formatowaniu kodu.Przycisk code

67,233 zapytań

114,194 odpowiedzi

242,038 komentarzy

45,643 pasjonatów

Przeglądających: 337
Pasjonatów: 7 Gości: 330

Motyw:

Akcja Pajacyk

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

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...