Polimorfizm 3 klas - virutal i override

0

Mam pewien problem, mając 3 klasy

 
    class A
    {
        public virtual void Wypisz()
        {
            Console.WriteLine("A");
        }
    }

    class B : A
    {
        public override void Wypisz()
        {
            Console.WriteLine("B");
        }
    }

    class C : B
    {
       
    }

Problem polega na tym, że w klasie C mogę przesłonić (override) funkcję Wypisz() Dlaczego tak ? ;d Rozumiem, że klasa B dziedziczy po klasie A funkcję Wypisz(), jest wirtualna więc może ją przesłonić. Z kolegi klasa C rozumiem, że dziedziczy po B też funkcję Wypisz() ale nie jest ona wirtualna tylko przeładowana, więc dlaczego może ją przeładować? Na moje w klasie B powinna być funkcja wypisz z przydomkiem override bo przesłaniam oraz virtual jednocześnie by potomek mógł też przesłonić :(

0

Metoda Wypisz jest wirtualna i taka pozostanie. Nie ważne ile razy ją zaimplementujesz w klasach potomnych. Nie rozumiem Twoich rozterek. Nadal możesz przesłonić Wypisz w klasie C

0

Rozumiem, że jest virtualna ale dlaczego w C mogę ją przesłonić ? Przecież C dziedziczy po B, a w B wypisz jest override a nie virtual ?

1

To działa na zasadzie drzewa. A jest na samej górze, B ma to co A, C ma to co B. Czyli C zawiera w sobie B i A ;]
Stąd jeśli w A jest metoda wirtualna to C dziedziczy ją za pośrednictwem B ;]

0

Przesłonienie zazwyczaj oznacza schowanie metody (hidden) bez override.

2

Rozumiem, że jest virtualna ale dlaczego w C mogę ją przesłonić ?
Bo tak. Musisz się z tym pogodzić :-)

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